LINUX.ORG.RU

глубина undo/redo в редакторе.

 


0

1

Какова по вашему должна быть глубина undo/redo в редакторе мечты.

варианты

  • непонятное, вообще не нужно

  • бесконечная глубина

  • фиксированная неким большим числом. при превышении лимита самый старая undo запись выбрасывается, при вставке новой

★★★

По мне, так фиксированное большое число, думаю сотни, может тысячи даже хватит.

Меня больше напрягает, когда делаешь undo после redo и теряешь предыдущую ветку redo. Редко, но бывает нужно.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

в человеческом редакторе (емаксе) история древовидная с незапамятных. плюс undo можно сделать локально в выделенном куске текста и это не затронет остальной текст. ну а в ваших убогих недоблокнотах, естественно, все через ж сделано. для вас такая элементарная фича это только в «редакторе мечты».

anonymous
()

Очевидны три вещи:

  • undo нужно
  • бесконечную глубину делать проще, потому что ограничение нужно явно писать
  • история занимает память

Итого остаётся только одна неизвестная - сколько именно памяти занимает ваша история, от неё и зависит ответ. Если редактор писал жопорук и у него на каждый уровень хранится снапшот документа, то конечно стоит ограничить. В нормальной реализации объём истории будет пропорционален размеру документа и можно ничего специально не делать.

anonymous
()
Ответ на: комментарий от anonymous

емаксом не пользовался. древовидная история, без половины фарша от гита, малополезна. придется пристраивать всякие там ребейзы, просмотр диффов веток, перенос изменений между ветками, и хранить к тому ж историю файла на диске, иначе зачем оно вообще нужно. то есть брать половину работы гита на себя. не наш путь.

undo в блоке - фича интересная.

alysnix ★★★
() автор топика
Ответ на: комментарий от anonymous

никакие снапшоты не нужны.

история хранится в виде изменений то есть записей вида - {вставить, позиция, размер блока}. при удалении в виде - {удалить, позиция, данные блока}. глубина может быть до сотен тыщ, в силу компактности представления изменений. понятно, что в реальности никто не будет откатываться назад на сотни тыщ изменений. к тому ж, поскольку данные хранятся только в течении сессии, вряд ли кто-то вообще накопит сотни тыщ изменений за сессию.

alysnix ★★★
() автор топика
Ответ на: комментарий от anonymous

Во-первых, не всем нужно, для кого-то обязательное требование к «редактору мечты» - отсутствие таких сложностей. Во-вторых, вопрос в равной степени применим и к древовидной истории.

Не понятно зачем вы вообще это написали - похоже что только ради понтов, а значит на деле позер сидящий на венде в vs code.

anonymous
()
Ответ на: комментарий от alysnix

емаксом не пользовался.

ну поэтому и не понимаешь о чем пишешь. ребейзы какие-то, на диске чего-то ранить собрался… совсем плохой.

то есть брать половину работы гита на себято есть брать половину работы гита на себя

если ты хочешь перманентно ранить вообще всё-всё то сделай хук который тебе будет в гит это коммитить или по таймеру или по сохранению файла. но зачем?

anonymous
()
Ответ на: комментарий от anonymous

лично я анду использую только в одном случае - случайная порча файла. например нажал некий символ, а уже стоял некий селекшн, и блок текста в селекшене был заменен на символ.

ну или по клавиатуре походил кот. или что-то вроде. перманентное спасение не поможет, поскольку если проблему заметили поздно, текст с ненужными изменениями попадет на диск.

анду с ветками - это уже чисто контроль версий. у него другое назначение.

alysnix ★★★
() автор топика

Бесконечная глубина, разумеется

Рассуждения про экономию памяти позабавили. Ребят, вы сколько мегабайт в секунду печатаете в среднем, что вам это актуально на современной тачке с гигабайтами ram? Даже если оперативная память реально могла бы закончиться, это было бы всего лишь поводом свопить undo на диск... Мы же о текстовом редакторе, да?

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 4)
Ответ на: комментарий от alysnix

не знаю как в emacs, но в vim древовидная история линеаризуется по времени по порядку возникновения состояний, типа раньше-позже. Можно вернуться к любому.

Это по сути возможно так как в отличии от git тут нет ситуации когда что-то просиходило параллельно у двых разных разработчиков, состояния последовательны. Когда пользовался vim - пользовался этой фичей раз в 3-4 месяца.

хранение истории изменений на диске там тоже кажется есть.

GPFault ★★
()
Ответ на: комментарий от alysnix

анду с ветками - это уже чисто контроль версий

Это вообще про другое. Например ты что-то сделал, чтобы попробовать и оно не работает. Ты делаешь анду как было, пробуешь по-другому. Опять не работает. Ты думаешь «а вот в том первом варианте может надо было так и так». Вопрос: как вернуться к первому варианту? Тупо анду вернёт тебя к «как было». Потому нужно сделать реду, но по первой ветке, т.к. просто реду вернёт второй вариант. Вот зачем нужно дерево.

В эмаксе можно выбирать, по какой ветке делать адну/реду, причём визуально.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

undo-tree же. Emacs умеет.

Буду знать. Так-то я больше код пишу в IDE и в них такого не видел. Кстати, да, надо будет погуглить плагины с таким названием.

Loki13 ★★★★★
()
Ответ на: комментарий от no-such-file

и это дерево хранится между сессиями? если хранится - то это недогит. а если не хранится, это баловство, хотя возможно, полезное, если гита нет.

вообще для таких игрищ в сиплюсах условная компиляция предназначена.

alysnix ★★★
() автор топика

В эмуляторах ретро-консолей интересная темка недавно появилась – Timeline

Суть в том, что «слепки» состояний создаются раз в условные 5 секунд и между ними можно переключаться по линейке с таймлайном.

Вот и для редактора что-то такое можно организовать с тем лишь отличием, чтобы дубли одинаковые на последнем состоянии не плодились. И по итогу Undo/Redo комбинации из сложного дерева, где сущесвует проблема потери/отмены Redo выправляются в линейный таймлайн.

EXL ★★★★★
()
Ответ на: комментарий от alysnix

и это дерево хранится между сессиями? если хранится - то это недогит. а если не хранится, это баловство, хотя возможно, полезное, если гита нет.

Это вообще про другое. Например про файлы, которые ты вообще не хочешь в гит пихать, типа сгененированных конфигов.

hateyoufeel ★★★★★
()