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