我的问题类似于如何实时监控文本文件,
但我想在vim中进行.我知道我可以读取打开的文件使用tail -f sample.xml文件,当新内容写入文件时,它还会将新内容写入我的屏幕.更新文件后,我可以让vim自动填充新数据吗?
Pet*_*ter 96
你可以:set autoread让vim在文件发生变化时读取它.但是(取决于您的平台),您必须重点关注.
从帮助:
如果检测到文件已在Vim外部更改且Vim内部未更改,则会再次自动读取.文件被删除后,这没有完成.
Pha*_*ang 30
将以下内容放入您的.vimrc:
" check one time after 4s of inactivity in normal mode set autoread au CursorHold * checktime
像@flukus在一个评论说,前面的回答,您可以call feedkeys["lh"](这将光标移动到右侧和背面左侧,其中查看日志文件时normaly不做伤害)
所以,如果你把答案的其余部分结合起来,你就可以在需要的时候从ex(whithin vim)运行:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(如果你想跳(几乎)到文件的末尾,只需使用"G"代替"lh"和feedkeys)
说明:
- autoread:从外部更改时读取文件(但它本身不起作用,没有内部计时器或类似的东西.它只会在vim执行操作时读取文件,如ex中的命令:!
- CursorHold*checktime:当用户在'updatetime'指定的时间内没有移动光标时(默认为4000毫秒),执行checktime,检查文件外部的变化
- 调用feedkeys("lh"):光标向左,向右和向后移动.然后没有任何反应(...这意味着,CursorHold被触发,这意味着我们有一个循环)
此外,您可以:set syntax=logtalk为日志着色
要在使用时停止滚动call feedkeys("G"),执行:set noautoread- 现在vim将告诉该文件已更改并询问是否要读取更改)
(这有副作用吗?)
编辑:我看到一个副作用:如果使用"G"输入键,它会向下滚动每个当前打开的缓冲区?!因此,在使用正确的缓冲区自动向下滚动日志文件时,无法在splittet窗口的左缓冲区中工作