Vim:在文件被更改和重新加载后保留文件的历史记录

时间:2010-01-04 23:19:58

标签: vim

如果我在Vim中编辑文件,那么一些外部程序会更改文件,Vim告诉我:

W11: Warning: File "test.erl" has changed since editing started
See ":help W11" for more info.
[O]K, (L)oad File: 

如果我L oad该文件,则所有撤消历史记录都将丢失。

有什么办法可以避免吗?

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

我不相信这是可能的。

有一个非常有用的补丁可用于可用的vim源代码here,它在退出vim并重新启动后保留撤消历史记录。但是,我刚试过它,当外部编辑文件时它似乎失败了。可能值得联系作者或报告补丁网站上的错误,看看是否可以克服这个问题。

答案 2 :(得分:0)

天儿真好,

我不确定但是设置autoread,即输入:set autoread会在文件发生变化时保留撤消历史记录吗?

Hmmmm。我想可能不是因为更改历史记录是作为行号维护的,而vim不知道这些行号是否仍然与更改的文件相关。

BTW WTF你是在编辑一个外部力量正在改变的文件吗?听起来很危险。 ( - :

答案 3 :(得分:0)

这是我在Vim 7.3之前使用的一种解决方法:

" :e usually clears undo history, so we don't really do :e any more.
" Instead we delete the contents of the buffer, then read the file in, which
" is an operation we can undo.  We must delete the top (empty) line also.

:map :e<Enter> :%d<Enter>:r<Enter>:0<Enter>dd

当您看到警告提示时,您必须点击o k而不是l oad,然后自行执行加载::e<Enter>

有两个缺点(虽然我发现可以接受的权衡):

  • 你失去了你所在的路线。您的光标位于文件顶部。
  • Vim仍然认为缓冲区与文件不同步,因此当您下次保存时,您可能需要执行:w!而非正常:w,并且您需要点击{{ 1}}确认覆盖。

修改:可能有a workaround for the second problem

编辑:第一个问题可以通过更多脚本来解决(请参阅y。)

答案 4 :(得分:-2)

我不知道vim如何跟踪它没有做的事情。

所以,关于这个问题,我建议 - 源代码控制......但这可能不是你正在寻找的答案。