如果我在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该文件,则所有撤消历史记录都将丢失。
有什么办法可以避免吗?
答案 0 :(得分:2)
更新:这似乎是Vim 7.3中的新功能之一:https://groups.google.com/group/vim_announce/browse_thread/thread/66c02efd1523554b
答案 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>
有两个缺点(虽然我发现可以接受的权衡):
:w!
而非正常:w
,并且您需要点击{{ 1}}确认覆盖。修改:可能有a workaround for the second problem。
编辑:第一个问题可以通过更多脚本来解决(请参阅y
。)
答案 4 :(得分:-2)
我不知道vim如何跟踪它没有做的事情。
所以,关于这个问题,我建议 - 源代码控制......但这可能不是你正在寻找的答案。