检测文件更改,提供重新加载文件

我通常使用gVim进行编辑,但有时在远程连接到我的机器时使用vim。

当我在gVim中打开一个文件,并且它已经从外部更改(例如来自存储库的新更新)时,gVim提供重新加载它。

但是,当Vim发生这种情况时,除非您尝试保存文件,否则它什么也不做。 它只是警告你,文件已经改变,但不提供重新加载它。

那里有一个让Vim的行为匹配gVim的设置?

这是使用名为FileChangedShell的自动命令完成的。 我太新了,不能发布链接,但最好的办法是阅读vim文档的autocmd部分(Google)

但要点是在你的vimrc中设置如下的行

:au FileChangedShell * echo "Warning: File changed on disk" 

如果你想打开更新的文件使用

 :e 

它应该重新加载打开的文件。

正如ashcatch所说, :checktime命令将检查磁盘上的更改并提示您重新加载。 所以设置Vim在一些事件之后自动运行checktime 。 哪个事件是由你决定的。 一种可能性是使用CursorHold ,它在你移动光标后触发,然后让它静止更新时间毫秒。 (默认4秒)

 :au CursorHold * checktime 

您也可以将它设置在WinEnterBufWinEnter以便每次在缓冲区/窗口之间切换时都会更改。 如果你真的偏执,你可以将它设置在CursorMoved这样每次移动光标时都会检查磁盘上的文件,但这可能是矫枉过正的,可能会稍微滞后。

请参阅:h checktime:h checktime:h updatetime :h autocmd-events-abc

您可以手动触发检查:checktime 。 gvim每次重新获得焦点时都会这样做,所以经常不需要手动检查。

我不知道是否有不同的方法(如在一定的时间间隔自动检查)。

为了改进Carper的答案:

 " Run checktime in buffers, but avoiding the "Command Line" (q:) window au CursorHold * if getcmdwintype() == '' | checktime | endif 

没有这个检查,如果你尝试使用“命令行”(q :)缓冲区,Vim会喷出错误,因为这个缓冲区不支持:checktime命令。 通过#vim上的kdlv发现了这一点。