Vim的autoread是如何工作的?

:h autoread说:

当一个文件被检测到在Vim之外被更改,并且在Vim里面没有被更改时,自动再次读取它。

在我的vimrc set autoread后,我用Vim打开一个文件,切换到另一个编辑器,更改文件,并等待在Vim中查看更改。 什么都没发生。 我必须使用:e用新的内容重新加载文件。

我错过了什么? 我在Mac 10.5.8上使用Vim 7.2

Autoread不会重新加载文件,除非你做一些像运行外部命令(如!ls或!sh等)vim不会定期检查你可以使用:e手动重新加载文件:e

更多细节在这个线程: 点击这里

我使用下面的代码片断,当我切换缓冲区或再次聚焦vim时触发autoread:

 au FocusGained,BufEnter * :silent! ! 

另外,将它与下面的代码片段结合使用是非常有意义的,以便在离开缓冲区或vim时始终保存文件,避免冲突情况:

 au FocusLost,WinLeave * :silent! w 

编辑:如果你想通过禁用保存(例如棉绒)上运行的任何钩子来加快写入,你可以在w命令前加上noautocmd

 au FocusLost,WinLeave * :silent! noautocmd w 

根据我在超级用户网站上发布的信息

自动重新启动不起作用。 使用以下内容。

http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally

通过直接调用设置function,我得到了最好的结果。

 let autoreadargs={'autoread':1} execute WatchForChanges("*",autoreadargs) 

原因是,我想运行一个ipython / screen / vim安装程序。

在gvim之外,autoread不适合我。

为了解决这个问题,我使用这个相当丑陋的黑客。

 set autoread augroup checktime au! if !has("gui_running") "silent! necessary otherwise throws errors when using command "line window. autocmd BufEnter * silent! checktime autocmd CursorHold * silent! checktime autocmd CursorHoldI * silent! checktime "these two _may_ slow things down. Remove if they do. autocmd CursorMoved * silent! checktime autocmd CursorMovedI * silent! checktime endif augroup END 

这似乎是脚本irishjava链接到,但是可以让你切换缓冲区。 我只是想让它为一切工作。

对我来说,当我使用该命令时,它工作

 :set autoread 

当然,在发生任何事情之前,您必须将文件保存在其他编辑器中。

光标停止移动时触发

添加到你的vimrc

 au CursorHold,CursorHoldI * checktime 

默认情况下, CursorHold在光标停留4秒后触发,可通过updatetime进行configuration。

缓冲区更改触发器

要在更改缓冲区时触发自动反应,请添加到您的vimrc

 au FocusGained,BufEnter * checktime 

terminal窗口焦点触发

为了让FocusGained (参见上面)在纯Vim中工作,在terminal模拟器(Xterm,tmux等)中安装插件: vim-tmux-focus-events

在tmux版本> 1.9上,您需要添加.tmux.conf

 set -g focus-events on