Answers:
:help timestamp
”似乎表明我是错误的,并且Vim仅对特定事件进行检查,因此可能需要使autocmd进行更频繁的检查。
自动读取无法正常工作。以下对我有用:
您需要首先从此处安装脚本。
像这样直接调用setup函数可以获得最佳结果。
let autoreadargs={'autoread':1}
execute WatchForChanges("*",autoreadargs)
原因是我要运行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
到目前为止,vim-autoread插件对我有用:
自动读取
自动导致vim重新加载自上次从vim写入以来已写入磁盘但未在缓冲区中修改的文件。这使得在vim中打开的文件可以使用其他应用程序进行编辑并保存。返回vim后,只要您自上次更改以来就没有修改过文件,该文件将自动更新以反映磁盘上所做的更改,就像您手动按:e一样。
j
)才能看到有效的更新。我在这里创建了一个与此相关的问题:github.com/djoshea/vim-autoread/issues/3
从这个答案(指的是PhanHaiQuang的答案和@flukus的评论)
可以在需要时从ex(whitin vim)运行此oneliner(或在打开日志文件时将每个命令放在vimrc中。)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
说明:
- 自动读:读取来自外部的变化时,该文件(但它自身不工作,不存在内部定时器或类似的东西,它只会读取时VIM中前做一个动作,像这样的命令文件。:!
- CursorHold * checktime:当用户未在'updatetime'中指定的时间(默认为4000毫秒)中移动光标时,将执行checktime,它检查文件外部的更改
- 调用feedkeys(“ lh”):光标向右和向左移动一次,然后什么也没有发生(...这意味着CursorHold被触发,这意味着我们有一个循环)
lh
不执行任何操作,如果光标位于行的最后位置,lh
则会更改其位置。
另一种方法是定期将checktime
命令从外部进程发送到vim。这是一个执行此操作的ShellJS脚本(shelljs-plugin-sleep
require,NeoVim和nvr
)
while (true) {
sleep(15);
var servernames = exec('nvr --serverlist').trim().split('\n');
if (!servernames.length || !servernames[0]) {
continue;
}
servernames.forEach(
(sn) => exec(`nvr -c "checktime" --servername ${sn}`) );
}