в человеческом редакторе (емаксе) история древовидная с незапамятных. плюс undo можно сделать локально в выделенном куске текста и это не затронет остальной текст. ну а в ваших убогих недоблокнотах, естественно, все через ж сделано. для вас такая элементарная фича это только в «редакторе мечты».
бесконечную глубину делать проще, потому что ограничение нужно явно писать
история занимает память
Итого остаётся только одна неизвестная - сколько именно памяти занимает ваша история, от неё и зависит ответ. Если редактор писал жопорук и у него на каждый уровень хранится снапшот документа, то конечно стоит ограничить. В нормальной реализации объём истории будет пропорционален размеру документа и можно ничего специально не делать.
емаксом не пользовался. древовидная история, без половины фарша от гита, малополезна. придется пристраивать всякие там ребейзы, просмотр диффов веток, перенос изменений между ветками, и хранить к тому ж историю файла на диске, иначе зачем оно вообще нужно. то есть брать половину работы гита на себя. не наш путь.
история хранится в виде изменений то есть записей вида - {вставить, позиция, размер блока}. при удалении в виде - {удалить, позиция, данные блока}. глубина может быть до сотен тыщ, в силу компактности представления изменений. понятно, что в реальности никто не будет откатываться назад на сотни тыщ изменений. к тому ж, поскольку данные хранятся только в течении сессии, вряд ли кто-то вообще накопит сотни тыщ изменений за сессию.
Во-первых, не всем нужно, для кого-то обязательное требование к «редактору мечты» - отсутствие таких сложностей. Во-вторых, вопрос в равной степени применим и к древовидной истории.
Не понятно зачем вы вообще это написали - похоже что только ради понтов, а значит на деле позер сидящий на венде в vs code.
ну поэтому и не понимаешь о чем пишешь. ребейзы какие-то, на диске чего-то ранить собрался… совсем плохой.
то есть брать половину работы гита на себято есть брать половину работы гита на себя
если ты хочешь перманентно ранить вообще всё-всё то сделай хук который тебе будет в гит это коммитить или по таймеру или по сохранению файла. но зачем?
лично я анду использую только в одном случае - случайная порча файла. например нажал некий символ, а уже стоял некий селекшн, и блок текста в селекшене был заменен на символ.
ну или по клавиатуре походил кот. или что-то вроде. перманентное спасение не поможет, поскольку если проблему заметили поздно, текст с ненужными изменениями попадет на диск.
анду с ветками - это уже чисто контроль версий. у него другое назначение.
Рассуждения про экономию памяти позабавили. Ребят, вы сколько мегабайт в секунду печатаете в среднем, что вам это актуально на современной тачке с гигабайтами ram? Даже если оперативная память реально могла бы закончиться, это было бы всего лишь поводом свопить undo на диск... Мы же о текстовом редакторе, да?
не знаю как в emacs, но в vim древовидная история линеаризуется по времени по порядку возникновения состояний, типа раньше-позже. Можно вернуться к любому.
Это по сути возможно так как в отличии от git тут нет ситуации когда что-то просиходило параллельно у двых разных разработчиков, состояния последовательны. Когда пользовался vim - пользовался этой фичей раз в 3-4 месяца.
хранение истории изменений на диске там тоже кажется есть.
Это вообще про другое. Например ты что-то сделал, чтобы попробовать и оно не работает. Ты делаешь анду как было, пробуешь по-другому. Опять не работает. Ты думаешь «а вот в том первом варианте может надо было так и так». Вопрос: как вернуться к первому варианту? Тупо анду вернёт тебя к «как было». Потому нужно сделать реду, но по первой ветке, т.к. просто реду вернёт второй вариант. Вот зачем нужно дерево.
В эмаксе можно выбирать, по какой ветке делать адну/реду, причём визуально.
В эмуляторах ретро-консолей интересная темка недавно появилась – Timeline
Суть в том, что «слепки» состояний создаются раз в условные 5 секунд и между ними можно переключаться по линейке с таймлайном.
Вот и для редактора что-то такое можно организовать с тем лишь отличием, чтобы дубли одинаковые на последнем состоянии не плодились. И по итогу Undo/Redo комбинации из сложного дерева, где сущесвует проблема потери/отмены Redo выправляются в линейный таймлайн.