这个答案说:
Vim的撤销/重做系统是无与伦比的.键入内容,撤消,键入其他内容,您仍然可以取回键入的第一个内容,因为Vim使用撤消树而不是堆栈.在几乎所有其他程序中,您输入的第一件事的历史在这种情况下都会丢失.
这是我第一次听到这个.我怎么能沿着树回溯呢?
另请参阅:h undo-redo
,其中列出了所有命令及其用法.
有两种方法可以遍历撤消树.一个是"回到过去". g+
并按g-
时间顺序或反向时间顺序遍历树中的所有节点(这可能有点令人困惑,因为它可以在撤销分支之间任意跳转,但如果你做得g-
足够长,你总会到达你需要去的地方最终). :earlier
并:later
采用像7m
或的时间描述符1h
; 再次,这可以在撤消分支之间任意跳转.
另一种方法是跳转到树中的特定节点,:undo n
其中where n
是多个动作.(所有操作,即文本添加,删除,替换,都按顺序编号.)您可以通过查找撤消树的叶子上的操作数:undolist
.这将让您轻松地在分支之间跳转.然后u
,您可以使用和Ctrl-R
上下移动该分支.
在Vim帮助中有一些很好的例子.弄清楚这是如何工作的最好方法是稍微玩一下.
I'm a bit late to the party, but I figured I'd mention that I wrote an undo tree visualization plugin for Vim: http://bitbucket.org/sjl/gundo.vim/
Personally I found that graphing the tree like this was the only way I could make sense of it.
此页面介绍了您需要了解的所有内容:
http://vimdoc.sourceforge.net/htmldoc/usr_32.html
如果您正在使用vim,则可以使用以下命令在undo树中导航:
u
:(撤消)在撤消树中返回
Ctrl+R
:(重做)在撤消树中向前移动
将文档及时返回或转发的其他方法:
:earlier 15m
:及时回到15分钟
:later 15m
:及时前进15分钟
我知道这个问题已得到解答,但我想我会添加一个例子.
创建一个新文件并键入:
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
其中很多内容总结如下:
http://vim.wikia.com/wiki/Using_undo_branches