检测文件更改,提供重新加载文件
我通常使用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
您也可以将它设置在WinEnter
或BufWinEnter
以便每次在缓冲区/窗口之间切换时都会更改。 如果你真的偏执,你可以将它设置在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发现了这一点。