我的问题类似于how to monitor a text file in realtime
但我想在vim中做到这一点。我知道我可以使用tail -f sample.xml
文件读取打开的文件,当新内容写入文件时,它还会将新内容写入我的屏幕。在更新文件时,我可以让vim自动填充新数据吗?
答案 0 :(得分:94)
您可以:set autoread
以便vim在文件发生变化时读取该文件。但是(取决于您的平台),您必须重点关注。
来自帮助:
检测到文件时有 在Vim和它之外被改变了 在Vim内部没有改变, 自动再次阅读。当。。。的时候 文件已被删除,这不是 完成。
答案 1 :(得分:62)
不自动了解,但您可以输入:
:e!
重新加载文件
答案 2 :(得分:28)
将以下内容放入.vimrc
:
" check one time after 4s of inactivity in normal mode set autoread au CursorHold * checktime
答案 3 :(得分:8)
call feedkeys["lh"]
(它将光标向右移动并向左移动,这在查看时不会造成伤害。日志文件)
所以,如果你将answer的其余部分组合在一起,你就可以在需要的时候从ex(whithin vim)运行:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(如果你想(几乎)跳到文件的末尾,只需使用" G"而不是" lh"使用feedkeys) 强>
说明:
- autoread :从外部更改时读取文件(但它本身不起作用,没有内部计时器或类似的东西。它只会在vim执行操作时读取文件,如ex :!
中的命令
- CursorHold * checktime :当用户未按照“更新时间”中指定的时间移动光标时(默认为4000毫秒)执行checktime,检查文件外部的变化
- 调用feedkeys(" lh"):光标向左,向右和向后移动。没有任何反应(...这意味着CursorHold被触发,这意味着我们有一个循环)
此外,您可以:set syntax=logtalk
为日志着色
要在使用call feedkeys("G")
时停止滚动,请执行:set noautoread
- 现在vim将告知,文件已更改并询问是否要阅读更改
(这有副作用吗?)
编辑:我看到一个副作用:如果使用" G"如果是feedkey,它会向下滚动每个当前打开的缓冲区?!因此,在使用正确的缓冲区自动向下滚动日志文件时,无法在splittet窗口的左缓冲区中工作
答案 4 :(得分:3)
Tail Bundle应该做你想做的事。注意,我自己没有用过它。
答案 5 :(得分:2)
如果是unix + neovim
:term tail -f <filename>
显然,这对每个人都不起作用,但这就是我如何做到的。
答案 6 :(得分:1)
答案 7 :(得分:0)
VIM会在文件更新时向您发出警告,以便您不会覆盖自打开文件后所做的更改。它会在此时提示您重新加载文件。