这个答案说:
Vim的撤消/重做系统无与伦比。输入一些内容,然后撤消,再输入其他内容,由于Vim使用撤消树而不是堆栈,因此您仍然可以取回您输入的第一件事。在这种情况下,几乎在所有其他程序中,您键入的第一件事的历史都会丢失。
这是我第一次听说。我如何沿树后移?
这个答案说:
Vim的撤消/重做系统无与伦比。输入一些内容,然后撤消,再输入其他内容,由于Vim使用撤消树而不是堆栈,因此您仍然可以取回您输入的第一件事。在这种情况下,几乎在所有其他程序中,您键入的第一件事的历史都会丢失。
这是我第一次听说。我如何沿树后移?
Answers:
另请参见:h undo-redo
,其中列出了所有命令及其用法。
遍历撤消树有两种方法。一种是“回到过去”。 g+
并且g-
会按时间顺序或逆时间顺序遍历树中的所有节点(这可能有点令人困惑,因为它可以在撤消分支之间任意跳转,但是如果您做的g-
时间足够长,那么总会到达需要的位置最终)。 :earlier
并:later
采用时间描述符,例如7m
或1h
;同样,这可以使您在撤消分支之间任意跳转。
另一种方法是使用:undo n
where n
动作数跳到树中的特定节点。(所有动作,即文本的添加,删除,替换,都按照您执行的顺序编号。)您可以通过来在撤消树的叶子上查找动作的数量:undolist
。这将使您轻松地在分支之间跳转。然后u
,您可以使用和Ctrl-R
在该分支上上下移动。
Vim帮助中有一些很好的例子。弄清楚这是如何工作的最好方法是稍微玩一下。
undojoin
与分支无关;实际上,下一个帮助部分首先说:“上面我们只讨论了一行撤消/重做。但是也可以分支。” 有什么方法可以undojoin
与我没看到的分支一起使用?
我参加聚会有点晚了,但是我想我要提到我为Vim编写了一个撤消树可视化插件:http : //bitbucket.org/sjl/gundo.vim/
我个人发现,像这样绘制树是我能理解它的唯一方法。
Plug 'sjl/gundo.vim'
,然后nnoremap <F5> :GundoToggle<CR>
(<F5>
通过您要绑定的任何键序列替换)
本页说明了您需要了解的所有内容:
如果您使用的是vim,则可以使用以下命令浏览撤消树:
u
:(撤消)在撤消树中移回Ctrl+R
:(重做)在撤消树中前进使文档及时回退的其他方式:
:earlier 15m
:向后移15分钟:later 15m
:及时向前移动15分钟earlier
并且later
它不会跨分支移动。我希望大多数人不关心或记住他们创建的各个分支。但是只是想回到过去。如果您想创建分支并命名,git
最好使用版本控制系统。
我知道已经回答了这个问题,但我想举个例子。
创建一个新文件并键入:
this is a line
undol
将显示撤消树。此时,您还没有撤消任何操作
:undol
number changes when saved
1 1 14:50:36
现在按ESC,并将行修改为:
this is a old line
切换到普通模式,然后按u(撤消),这应该删除“ old”。如果您选中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