假设文件在 VIM 缓冲区中没有未保存的更改,如果文件在磁盘上发生更改,我希望它自动重新加载。最常见的用例是当我更新文件所在的工作副本时。
我怎样才能做到这一点?
Ben*_*ier 40
在您的~/.vimrc
:
set autoread
Run Code Online (Sandbox Code Playgroud)
小智 18
这对我有用
set autoread
au CursorHold * checktime
Run Code Online (Sandbox Code Playgroud)
第一行本身是不够的。你可以放进你.vimrc
来自这个答案(参考 PhanHaiQuang的回答和@flukus的评论)
可以在需要时从 ex (whithin vim) 运行这个 oneliner(或者将每个命令放在 vimrc 中,以便在打开日志文件时。)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
说明:
- autoread:从外部更改时读取文件(但它不能自行工作,没有内部计时器或类似的东西。它只会在 vim 执行操作时读取文件,例如 ex 中的命令:!
- CursorHold * checktime:当用户在 'updatetime' 中指定的时间(默认为 4000 毫秒)内没有移动光标时,将执行 checktime,它会检查文件外部的更改
-调用 feedkeys("lh"):光标移动一次,向右和向左移动。然后什么也没有发生(...这意味着,CursorHold 被触发,这意味着我们有一个循环)
小智 5
自动阅读无法正常工作。以下对我有用:
您需要首先从此处安装脚本。
我通过直接调用 setup 函数得到了最好的结果,就像这样。
let autoreadargs={'autoread':1}
execute WatchForChanges("*",autoreadargs)
Run Code Online (Sandbox Code Playgroud)
这样做的原因是我想运行 ipython/screen/vim 设置。
您可以轻松地将其转换为增强版的视图。
mkdir -p ~/bin
cat <<`OUT` > ~/bin/vimviewer
#!/usr/bin/env sh
exec vim -n --cmd "source /home/bryan/.vim/.vimrc.watchforchanges | let autoreadargs={'autoread':1} | execute WatchForChanges('*',autoreadargs)" $@
`OUT`
chmod 755 ~/bin/vimviewer
vimview test.txt
Run Code Online (Sandbox Code Playgroud)