撤销在Vim中重新加载新缓冲区

3

我打开了一个文件,使用gvim编辑器,它问我是否要重新加载当前缓冲区,因为它检测到这个文件的新版本。我同意了,但事实证明新的缓冲区并不是我想要的。有没有办法恢复旧的缓冲区?遗憾的是,磁盘上的文件(以及我使用vim -r查看的交换文件)都包含了新的缓冲区。

3个回答

5
如果你的缓冲区行数少于“undoreload”设置,那么在重新加载之前它的内容将会被存储在“undotree”中。这意味着,一个简单的“u”或“g-”就可以恢复你的缓冲区内容。像我的“histwin”插件或著名的“Gundo”或“undotree”插件这样的插件也可能会有所帮助。
请注意,这需要至少版本为7.3或更高的Vim才能工作。旧版本的Vim在重新加载时不会存储缓冲区状态。

2
尝试使用“u”(撤销)功能;如果您自重新加载以来进行了更改,请重复操作,直到旧版本出现。
我正在使用终端Vim,但我认为这里不应该有任何区别。我在一个终端选项卡中用Vim打开了一个测试文件,在另一个选项卡中进行了编辑,保存后切换回第一个选项卡,运行“:e”重新加载文件,然后用“u”函数切换回上一个版本。

值得注意的是,您可以忽略磁盘上的更改,然后执行 :DiffOrig 命令,以查看当前缓冲区与磁盘上内容的差异。您需要将 :DiffOrig 命令添加到您的 ~/.vimrc 文件中。有关更多帮助,请参阅 :h :DiffOrig - Peter Rincker
好主意,但我已经尝试过了,没有起作用。这可能是因为你的测试文件比较小,所以可以全部放入撤消缓冲区,而我的文件稍微大一些,无法全部放入缓冲区。 - Stephen

1
我在我的 .vimrc 文件中有类似以下内容的东西。
" Backup stuff
set backupdir=~/.vim/backup
set directory=~/.vim/swap
set undodir=~/.vim/undo

如果您意外覆盖了本地更改并想要找回旧版本的文件,我可以帮忙处理此类情况。请确保先创建目录,以避免启动时出现错误。


我对备份目录有类似的设置,但不知道撤销目录。但我认为这并没有什么帮助——我认为增加“undoreload”可能是唯一能帮助我的事情。 - Stephen

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