如何使用VIM的撤消树?

这个答案说:

Vim的撤销/重做系统是无与伦比的。 input一些东西,撤消,input其他的东西,你仍然可以找回你input的第一个东西,因为Vim使用了一个撤消树而不是堆栈。 在几乎所有其他的程序中,你input的第一个东西的历史在这种情况下都会丢失。

这是我听到的第一个。 我怎样才能沿着树回溯?

另请参阅:h undo-redo ,其中列出了所有命令及其用法。

遍历撤销树有两种方法。 一个是“回来”。 g+g-将按照时间顺序或逆时针顺序遍历树中的所有节点(这可能有点令人困惑,因为它可以在撤销分支之间任意跳转,但是如果你做得足够长的话,你最终需要去的地方)。 :earlier:later使用7m1h的时间描述符; 再次,这可以跳过你撤销分支之间任意。

另一种方法是使用以下命令跳转到树中的特定节点:undo n其中n是动作的编号。 (所有操作,即文本添加,删除,replace,都按顺序进行编号。)可以通过:undolist撤消树叶上的操作数:undolist 。 这将让你轻松地跳转分支。 然后,您可以使用uCtrl-R上下移动该分支。

在Vim的帮助中有一些很好的例子。 弄清楚这是如何工作的最好方法是玩一下。

我对晚会有点迟,但是我想我会提到我为Vim写了一个撤消树可视化插件: http : //bitbucket.org/sjl/gundo.vim/

就我个人而言,我发现像这样绘制树是我能理解的唯一方法。

这个页面解释你需要知道的一切:

http://vimdoc.sourceforge.net/htmldoc/usr_32.html

如果您使用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-