Этот ответ говорит:
Система отмены / повтора Vim не имеет себе равных. Напечатайте что-нибудь, отмените, напечатайте что-нибудь еще, и вы все равно сможете вернуть первое введенное вами сообщение, потому что Vim использует дерево отмены, а не стек. Почти в каждой другой программе в этом случае теряется история первого введенного вами текста.
Я впервые об этом слышу. Как я могу вернуться назад по дереву?
Ответы:
См. Также
:h undo-redo
, где перечислены все команды и их использование.Есть два способа пройти по дереву отмены. Один - вернуться «в прошлое».
g+
иg-
будет проходить все узлы в дереве в хронологическом или обратном хронологическом порядке (что может немного сбивать с толку, потому что он может произвольно прыгать между ветвями отмены, но если вы сделаете этоg-
достаточно долго, вы всегда попадете туда, куда вам нужно. в конце концов).:earlier
и:later
возьмите дескриптор времени, например7m
или1h
; опять же, это может произвольно переключать вас между ветвями отмены.Другой способ - перейти к определенным узлам в дереве, используя
:undo n
гдеn
- номер действия. (Все действия, то есть добавления текста, удаления, замены, нумеруются последовательно по мере их выполнения.) Вы можете посмотреть количество действий на листьях дерева отмены с помощью:undolist
. Это позволит вам легко перепрыгивать между ветками. Затем вы можете использоватьu
иCtrl-R
для перемещения вверх и вниз по этой ветке.В справке Vim есть несколько хороших примеров. Лучший способ понять, как это работает, - немного поиграть с этим.
источник
undojoin
это не имеет отношения к веткам; Фактически, следующий раздел справки начинается со слов: «Выше мы обсуждали только одну строку отмены / повтора. Но также возможно ответвление». Есть ли способ использоватьundojoin
ветки, которые я просто не вижу?Я немного опоздал на вечеринку, но подумал, что упомянул, что написал плагин для визуализации дерева отмены для Vim: http://bitbucket.org/sjl/gundo.vim/
Лично я обнаружил, что построение такого графика дерева было единственным способом разобраться в этом.
источник
Plug 'sjl/gundo.vim'
а затемnnoremap <F5> :GundoToggle<CR>
(заменяя<F5>
любой последовательностью клавиш, которую вы хотите привязать)На этой странице объясняется все, что вам нужно знать:
http://vimdoc.sourceforge.net/htmldoc/usr_32.html
источник
Если вы используете vim, вы можете перемещаться по дереву отмены, используя:
u
: (отменить) вернуться в дерево отменыCtrl+R
: (повторить) двигаться вперед в дереве отменыДругие способы вернуть документ назад или вперед во времени:
:earlier 15m
: вернуться во времени на 15 минут:later 15m
: двигаться вперед по времени 15 минутисточник
earlier
иlater
он не перемещается по веткам. Я ожидал, что большинству людей все равно и они не помнят различные ветки, которые они создали. Но просто хочу вернуться в прошлое. Если вы хотите создавать ветки и давать им имена, возможно,git
лучше использовать систему контроля версий.Я знаю, что на этот вопрос был дан ответ, но я подумал, что добавлю пример.
Создайте новый файл и введите:
undol
отобразит дерево отмены. На данный момент вы ничего не отменилитеперь нажмите ESC и измените строку на:
переключитесь в нормальный режим и нажмите u (отменить), это должно удалить "старый". Если вы проверите
undol
, на данный момент у вас все еще есть только одна ветка.теперь измените строку так, чтобы она говорила:
Теперь
:undol
показывает:Вы можете переключиться на первую ветку, набрав
это переместит вас в конец ветки, связанной с номером 2. Вы можете перемещаться по этой ветке с помощью
g+
иg-
. В этот моментg+
ничего не будет делать (вы на листе). Если вы нажметеg-
«старый», он будет удален (вы проходите по первому дереву отмены). То есть, если вы удалите «старый» с помощьюg-
иg+
снова нажмете , «старый» будет восстановлен.Если вы печатаете
Вы перепрыгнете к листу второй ветки отмены и увидите:
источник
Здесь многое из этого резюмируется:
http://vim.wikia.com/wiki/Using_undo_branches
источник
Помимо использования gundo.vim я хотел бы упомянуть
g+
иg-
источник
Пакет undotree написан на чистом vimscript, поэтому никаких требований.
И добавьте это в свой vimrc, пока не стало слишком поздно:
источник