如何使用VIM的撤消树?
这个答案说:
Vim的撤销/重做系统是无与伦比的。 input一些东西,撤消,input其他的东西,你仍然可以找回你input的第一个东西,因为Vim使用了一个撤消树而不是堆栈。 在几乎所有其他的程序中,你input的第一个东西的历史在这种情况下都会丢失。
这是我听到的第一个。 我怎样才能沿着树回溯?
另请参阅:h undo-redo
,其中列出了所有命令及其用法。
遍历撤销树有两种方法。 一个是“回来”。 g+
和g-
将按照时间顺序或逆时针顺序遍历树中的所有节点(这可能有点令人困惑,因为它可以在撤销分支之间任意跳转,但是如果你做得足够长的话,你最终需要去的地方)。 :earlier
和:later
使用7m
或1h
的时间描述符; 再次,这可以跳过你撤销分支之间任意。
另一种方法是使用以下命令跳转到树中的特定节点:undo n
其中n
是动作的编号。 (所有操作,即文本添加,删除,replace,都按顺序进行编号。)可以通过:undolist
撤消树叶上的操作数:undolist
。 这将让你轻松地跳转分支。 然后,您可以使用u
和Ctrl-R
上下移动该分支。
在Vim的帮助中有一些很好的例子。 弄清楚这是如何工作的最好方法是玩一下。
我对晚会有点迟,但是我想我会提到我为Vim写了一个撤消树可视化插件: http : //bitbucket.org/sjl/gundo.vim/
就我个人而言,我发现像这样绘制树是我能理解的唯一方法。
这个页面解释你需要知道的一切:
如果您使用vim,则可以使用以下命令浏览撤消树:
-
u
:(撤消)回退到撤消树中 -
Ctrl+R
:(重做)在撤消树中向前移动
其他方式及时提交文件:
-
:earlier 15m
:及时回15分钟 -
:later 15m
15分钟:15分钟前移动
我知道这个问题已经得到解答,但我想我会添加一个例子。
创build一个新文件并input:
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-
“old”将会被删除(你正在遍历第一个undo树),也就是说如果你用g-
去掉“old”并再次按下g+
,那么old将被重做。
如果你input
:u 3
你将跳转到第二个撤消分支的叶子,它会读取:
this is a new line
除了使用gundo.vim,我还想提及g+
和g-