Vim持久化撤销功能无法正常工作

7

我想在vim 7.4.9中使用持久化撤消功能。

在我的vimrc文件中,我有以下内容:

set undodir=/home/myname/.vim/undo//
set undofile
set undolevels=1000
set undoreload=10000

当然,/home/myname/.vim/undo目录已经存在。
我用vim打开了一些文件,并做了一些更改。
我看到在/home/myname/.vim/undo/中创建了撤销文件。
$ ll /home/myname/.vim/undo/
total 23K
-rw-r--r-- 1 hpcpcollab hpcpcollab  523 18 sept. 11:23 %home%myname%foo
-rw-r--r-- 1 hpcpcollab hpcpcollab  14K 18 sept. 11:03 %home%myname%bar
-rw-r--r-- 1 hpcpcollab hpcpcollab 2,2K 18 sept. 11:52 %home%myname%test

然而,当我关闭这些文件,重新打开它们,并按下'u'以撤消时,vim回复说:"已经到达最早的更改"。
我错过了什么吗?
谢谢。
朱利安
3个回答

3

也许7.4.24版本的补丁可以解决你的问题?无论如何,尝试使用:verbose :rundo ~/.vim/undo/undofile来明确地读取undofile,并查看Vim报告的错误。这应该有助于定位问题,找出为什么Vim不使用undofile。


撤销文件读取似乎没问题:读取撤销文件:/home/myname/.vim/undo/%home%myname%foo... 结束读取撤销文件:/home/myname/.vim/undo/%home%myname%foo 按回车键或输入命令以继续 - Julien REINAULD
所以撤销文件是正确的,我可以读取它,然后我可以撤消上一个会话中的更改。显然唯一的问题是这个撤销文件在启动时不会自动读取。 - Julien REINAULD

1
我有完全相同的配置,除了您的undodir定义末尾的//。请尝试删除它们。您也可以尝试使用:undolist命令来查看vim是否实际读取了内容。
我建议您使用Gundo插件来管理您的撤消树。这是我使用的最强大的插件之一,它提供了许多功能来管理vim中的撤消/重做。

如果Vim本身不会读取undofile,任何插件如何帮助呢? - Christian Brabandt
@Christian:插件部分只是一个建议。 - giovanni

0

我不知道原因,但你可以使用一个解决方法。创建一个 autocommand,在加载要编辑的文件后立即读取保存 undo 历史记录的目录:

au FileReadPost * rundo /home/myname/.vim/undo

如果撤销文件加载失败,那么这也不会起作用。此外,:rundo 需要从撤销文件中读取内容。 - Christian Brabandt
@ChristianBrabandt:你说得对。它接受一个文件,但我测试了一个目录,它也能工作,所以我就发帖了。我需要更仔细地看一下。至于加载失败的问题,我认为如果路径存在且可读,则不会发生。 - Birei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接