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