我通常使用gVim进行编辑,但有时在远程连接到我的机器时使用vim.
当我在gVim中打开一个文件并且它已从外部更改时(例如来自存储库的新更新),gVim提供重新加载它.
但是当Vim发生这样的事情时,在你尝试保存文件之前它什么都不做.它只是警告您文件已更改,但不提供重新加载它.
有一个设置让Vim的行为与gVim相匹配吗?
如果要打开更新的文件使用
:e
它应该重新加载打开的文件.
正如ashcatch所说,该:checktime
命令将检查磁盘上的更改并提示您重新加载.因此将Vim设置为checktime
在某个事件后自动运行.使用哪个事件取决于您.一种可能性是使用CursorHold
,在您移动光标然后让它静止updatetime
几毫秒后触发.(默认4秒.)
:au CursorHold * checktime
您也可以将其设置为WinEnter
或BufWinEnter
每次在缓冲区/窗口之间切换时都会更改.如果你真的是偏执狂,你可以设置它,CursorMoved
所以它每次移动光标时检查磁盘上的文件,但这可能是过度的,可能会滞后一点.
见:h checktime
,:h updatetime
,:h autocmd-events-abc
.
这是使用名为FileChangedShell的auto命令完成的.我太新了,不能发布链接,但你最好的选择是阅读vim文档的autocmd部分(谷歌为此)
但要点是在你的vimrc中设置类似下面一行的内容
:au FileChangedShell * echo "Warning: File changed on disk"
改进Carper的答案:
" Run checktime in buffers, but avoiding the "Command Line" (q:) window au CursorHold * if getcmdwintype() == '' | checktime | endif
如果您尝试使用"命令行"(q :)缓冲区,如果没有此检查,Vim将会出现错误,因为此缓冲区不支持该:checktime
命令.感谢#vim上的kdlv.
您可以手动触发检查:checktime
.gvim每次重新获得焦点时都会这样做,因此通常不需要进行手动检查.
我不知道是否有不同的方法(比如在某个时间间隔内自动检查).