Vim';什么是自动阅读工作?
Vim';什么是自动阅读工作?,vim,Vim,:h autoread表示: 当检测到文件已在Vim外部更改,但在Vim内部未更改时,自动再次读取该文件 将set autoread放入我的vimrc后,我用Vim打开一个文件,切换到另一个编辑器,更改文件,然后等待查看Vim中的更改。什么也没发生。我必须使用:e重新加载包含新内容的文件 我错过了什么?我在Mac 10.5.8上使用Vim 7.2,除非您做些什么,否则Autoread不会重新加载文件 像运行外部命令(像!ls或!sh等) vim不定期进行检查 您可以使用:e 此线程中的更多详细信
:h autoread
表示:
当检测到文件已在Vim外部更改,但在Vim内部未更改时,自动再次读取该文件
将set autoread
放入我的vimrc
后,我用Vim打开一个文件,切换到另一个编辑器,更改文件,然后等待查看Vim中的更改。什么也没发生。我必须使用:e
重新加载包含新内容的文件
我错过了什么?我在Mac 10.5.8上使用Vim 7.2,除非您做些什么,否则Autoread不会重新加载文件 像运行外部命令(像!ls或!sh等) vim不定期进行检查 您可以使用
:e
此线程中的更多详细信息:
对我来说,当我使用命令时,它会工作
:set autoread
当然,在发生任何事情之前,您必须将文件保存在其他编辑器中。根据
自动阅读根本不起作用。使用以下命令
我通过直接调用setup函数得到了最好的结果,如下所示
let autoreadargs={'autoread':1}
execute WatchForChanges("*",autoreadargs)
原因是,我想运行ipython/screen/vim设置。在gvim之外,自动读取对我不起作用 为了避开这个问题,我使用了这个相当丑陋的黑客
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链接到的脚本所做的,但它允许您为缓冲区切换这一点。我只想让它适用于所有情况。我使用以下代码片段,每当我切换缓冲区或再次聚焦vim时,它都会触发自动读取:
au FocusGained,BufEnter * :silent! !
此外,将其与以下代码段结合使用是有意义的,这样在离开缓冲区或vim时,文件总是被保存,从而避免冲突情况:
au FocusLost,WinLeave * :silent! w
编辑:如果您想通过禁用save上运行的任何挂钩(例如linters)来加快写入速度,可以在
w
命令前面加上noautocmd
:
au FocusLost,WinLeave * :silent! noautocmd w
当光标停止移动时触发
添加到您的vimrc
:
au CursorHold,CursorHoldI * checktime
au FocusGained,BufEnter * checktime
默认情况下,在光标静止4秒后触发,可通过进行配置
缓冲区更改触发器
要在更改缓冲区时触发autoread
,请将以下内容添加到vimrc
:
au CursorHold,CursorHoldI * checktime
au FocusGained,BufEnter * checktime
终端窗口焦点触发器
要使focusgound
(见上文)在普通vim中工作,请在终端仿真器(Xterm、tmux等)内安装插件:
在tmux versions>1.9上,您需要添加.tmux.conf
:
set -g focus-events on
派对有点晚了,但vim现在有计时器,你可以:
if ! exists("g:CheckUpdateStarted")
let g:CheckUpdateStarted=1
call timer_start(1,'CheckUpdate')
endif
function! CheckUpdate(timer)
silent! checktime
call timer_start(1000,'CheckUpdate')
endfunction
我知道这篇文章有点老,但希望这能帮助像我这样遇到类似问题的人 我不知道自动加载是如何工作的,但我知道vimscript是如何工作的,这通常是如何获取内容的 完成。如果你觉得这很有用,请向上投票。要回答您的问题,请不要在其他文件夹中编辑同一文件 编辑。如果要重新加载文件,通常会在vim中收到通知。我正在吃 这是个问题,但我的问题不同。我想在用编译css文件后重新加载它 scss的雨果。这就是我所做的,你可以接受我的代码想法,让它们满足你的需要 用法
嗨,谢谢。你的评论提醒我,我发布了这个。我想我会更新代码,因为它在使用命令行窗口(
q:
)时工作不好。这很好!我可以问一下,当checktime
起作用时,您是否知道一种让它写入文件读取时间戳(以及缓冲区重新加载时间戳)的方法?那太好了。终于!我已经尝试了很多让类似的东西工作的建议,但是没有一个在终端工作。这就完成了任务!谢谢。是的,我认为问题在于:set autoread仅在gui vim中有效,而不是从终端。我知道这是一个老问题,但我很难在这方面找到任何好的帮助。下面关于WatchForChanges函数的答案是金色的。autoread
可以在普通vim中工作,在终端仿真器内。我非常喜欢这个解决方案的简单性,所以也将它添加到vim wiki中。为什么不使用:checktime
来显式触发检查而不进行炮击?另外,Vim应该已经在FocusGain上执行此操作了,您不应该需要autocmd!如何将其添加到我的.vimrc中以使此行为成为默认行为?@StevieP在my.vimrc.Right上的相关行。谢谢@fphilipe!修女回答,看得长一点。这对我来说效果最好,似乎涵盖了所有情况。谢谢这是唯一的解决方案:我执行了prettier--write*
,我在vim中打开的所有文件都会立即得到更新-无需将模式从正常更改为插入,也无需执行其他操作来查看其他答案中的更改。虽然排名较高的其他解决方案让我头疼,但仍然无法正常工作,这一个只需复制代码就可以直接工作,而且工作起来很有魅力。这应该是最好的答案。