Как используется дерево отмены VIM?
В этом ответе говорится:
Система Vim undo/redo является непревзойденной. Напечатайте что-нибудь, отмените, введите что-то еще, и вы можете вернуть первое, что вы набрали, потому что Vim использует дерево отмены, а не стек. В почти каждой другой программе история первого, что вы набрали, теряется в этом обстоятельстве.
Это первое, что я слышал об этом. Как я могу вернуться назад по дереву?
Ответы
Ответ 1
См. также :h undo-redo
, в котором перечислены все команды и их использование.
Есть два способа перемещения дерева отмены. Один из них - "вернуться во времени". g+
и g-
будут перемещаться по всем узлам в дереве в хронологическом или обратном хронологическом порядке (что может быть немного запутанным, поскольку оно может произвольно перемещаться между ветвями отмены, но если вы делаете g-
достаточно долго, вы 'всегда всегда туда, куда вам нужно идти в конце концов). :earlier
и :later
взять дескриптор времени, например 7m
или 1h
; снова это может сканировать вас произвольно между ветвями отмены.
Другим способом является переход к определенным узлам в дереве с помощью :undo n
, где n
- это число действий. (Все действия, т.е. Текстовые дополнения, удаления, замены, нумеруются последовательно, как вы их делаете.) Вы можете посмотреть количество действий на листьях дерева отмены с помощью :undolist
. Это позволит вам легко прыгать между ветвями. Затем вы можете использовать u
и Ctrl-R
для перемещения вверх и вниз по этой ветке.
В помощи Vim есть несколько хороших примеров. Лучший способ выяснить, как это работает, - немного поиграть с ним.
Ответ 2
Я немного опаздываю на вечеринку, но, полагаю, я бы упомянул, что написал для Vim плагин визуализации дерева отмены: http://bitbucket.org/sjl/gundo.vim/
Лично я обнаружил, что графическое отображение дерева, подобного этому, было единственным способом, которым я мог бы это понять.
Ответ 3
На этой странице объясняется все, что вам нужно знать:
http://vimdoc.sourceforge.net/htmldoc/usr_32.html
Ответ 4
Если вы используете vim, вы можете перемещаться по дереву отмены, используя:
-
u
: (отменить) вернуться в дерево отмены
-
Ctrl+R
: (redo) перемещение вперед в дереве отмены
Другие способы возврата документа или вперед во времени:
-
:earlier 15m
: вернуться назад во времени 15 минут
-
:later 15m
: перемещение вперед во времени 15 минут
Ответ 5
Здесь много этого:
http://vim.wikia.com/wiki/Using_undo_branches
Ответ 6
Я знаю, что на этот вопрос был дан ответ, но я подумал, что добавлю пример.
Создайте новый файл и введите:
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-
"старый", будет удален (вы пересекаете первое дерево отмены). То есть, если вы удалите "старый" с помощью g-
и снова нажмите g+
, "старый" будет переделан.
Если вы наберете
:u 3
Вы перейдете к листу второй ветки отмены, и он будет читать:
this is a new line
Ответ 7
Кроме использования gundo.vim, я хотел бы упомянуть g+
и g-