Как используется дерево отмены VIM?

Этот ответ говорит:

Vim's undo/redo system is unbeatable. Type something, undo, type something else, and you can still get back the first thing you typed because Vim uses an undo tree rather than a stack. In almost every other program, the history of the first thing you typed is lost in this circumstance.

Это первое, что я слышу об этом. Как я могу вернуться вдоль дерева?

 Aaron Miller05 авг. 2013 г., 16:28
Ревнивые пользователи Emacs могут захотеть узнать оundo-tree-mode.

Ответы на вопрос(7)

вы можете перемещаться по дереву отмены, используя:

u: (undo) move back in the undo tree Ctrl+R: (redo) move forward in the undo tree

Другие способы вернуть документ назад или вперед во времени:

:earlier 15m: move back in time 15 minutes :later 15m: move front in time 15 minutes
 25 апр. 2017 г., 15:57
Это будет перемещаться по всем веткам, сортируя все точки по времени. Смотрите ответ @BrianCarper.
 31 янв. 2018 г., 18:00
@JonathanHartley, если вы используетеearlier а такжеlater это не перемещается через ветви. Я ожидал бы, что большинство людей действительно не заботятся или помнят различные ветви, которые они создали. Но просто хочу вернуться во времени. Если вы хотите создать ветки и назвать их, возможно,git или система контроля версий является лучшим вариантом.
 03 авг. 2016 г., 21:49
Этот ответ только объясняет, как двигаться вперед и назад на одной ветви. Не как перемещаться между ветками.
 04 февр. 2018 г., 22:20
@ alpha_989 Ваши комментарии о контроле версий не имеют смысла. Контроль версий для состояния именованных файлов на диске. Мы говорим о дереве отмен Vim, которое является просто структурами данных в памяти. Они оба используют слово «ветвь», но оно не означает одно и то же.
 04 февр. 2018 г., 22:35
Спасибо всем, кто указал ранее / позже, переезжайте через филиалы!

что на этот вопрос дан ответ, но я подумал, что добавлю пример.

Создайте новый файл и введите:

this is a line

undol отобразит дерево отмены. На данный момент вы ничего не отменили

:undol

number changes  when               saved
     1       1  14:50:36

Теперь нажмите ESC и измените строку на:

this is a old line

переключитесь в нормальный режим и нажмите u (отменить), это должно удалить «старый». Если вы проверитеundolНа данный момент у вас все еще есть только одна ветвь.

Теперь измените строку так:

this is a new line

Сейчас:undol показывает:

number changes  when               saved
     2       2  87 seconds ago
     3       2  3 seconds ago

Вы можете переключиться на первую ветку, набрав

:u 2

это переместит вас в конец ветви, связанной с номером 2. Вы можете двигаться вдоль этой ветви сg+ а такжеg-, С этой точки зренияg+ ничего не сделаешь (ты у листа). Если вы нажметеg- & # X201C; старые & Quot; будет удален (вы пересекаете первое дерево отмены). То есть, если вы удалите & # x201C; old & # x201D; сg- и нажмитеg+ еще раз, & # x201C; старый & quot; будет переделан.

Если вы печатаете

:u 3

Вы перейдете к листу второй ветви отмены, и он будет читать:

this is a new line

но решил, что упомянул, что написал плагин для визуализации отмены дерева для Vim:http://bitbucket.org/sjl/gundo.vim/

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

Решение Вопроса

:h undo-redo, в котором перечислены все команды и их использование.

Есть два способа пройтись по дереву отмены. Один из них - вернуться назад во времени.g+ а такжеg- будет пересекать все узлы в дереве в хронологическом или обратном хронологическом порядке (что может немного сбивать с толку, поскольку оно может произвольно переходить между отмененными ветвями, но еслиg- достаточно долго, вы всегда будете получать то, что вам нужно, в конце концов).:earlier а также:later взять дескриптор времени, как7m или же1h; опять это может произвольно перескочить между ветвями отмены.

Другой способ - перейти к определенным узлам дерева, используя:undo n гдеn это номер действия. (Все действия, т. Е. Добавления, удаления, замены текста, нумеруются последовательно по мере их выполнения.) Количество действий на листьях дерева отмен можно посмотреть с помощью:undolist, Это позволит вам легко прыгать между ветками. Вы можете использоватьu а такжеCtrl-R двигаться вверх и вниз по этой ветви.

В справке Vim есть несколько хороших примеров. Лучший способ понять, как это работает, - немного поиграть с ним.

 18 февр. 2011 г., 23:57
Своего рода из. Посмотри вверх: h undojoin
 07 нояб. 2013 г., 22:17
@ Pod Это похожеundojoin не имеет ничего общего с ветвями; фактически следующий раздел справки начинается со слов «выше» мы обсуждали только одну строку отмены / возврата. Но также возможно отделение. & Quot; Есть ли способ использоватьundojoin с ветками, которые я просто не вижу?
 30 янв. 2013 г., 00:00
Я не знал, как использовать это отмененное дерево, но я знал, что когда-нибудь оно спасет мою жизнь. Ну, день настал. Спасибо!!
 10 нояб. 2011 г., 03:50
Vim настолько классный, что даже реализует наши шутки о том, как это здорово!
 09 февр. 2010 г., 20:54
Вы можете объединить ветви? (Я шучу)

g+ а такжеg-

Ваш ответ на вопрос