vim可以监控文件的实时更改

Pat*_*ick 98 vim

我的问题类似于如何实时监控文本文件, 但我想在vim中进行.我知道我可以读取打开的文件使用tail -f sample.xml文件,当新内容写入文件时,它还会将新内容写入我的屏幕.更新文件后,我可以让vim自动填充新数据吗?

Pet*_*ter 96

你可以:set autoread让vim在文件发生变化时读取它.但是(取决于您的平台),您必须重点关注.

从帮助:

如果检测到文件已在Vim外部更改且Vim内部未更改,则会再次自动读取.文件被删除后,这没有完成.

  • 谢谢你的暗示!这看起来很有前景,但它不适用于我的系统:(我使用Mac10.6.2 iTerm与vim版本7.2.303编译与MacVim.任何其他评论,我可以尝试? (5认同)
  • 不幸的是,我不知道解决方案.如果vim可以在没有改变焦点的情况下做到这一点,我会感到震惊 - 它需要vim轮询文件系统以查看它何时发生变化.我认为你需要一个插件. (3认同)
  • @Peter我[制作了这样一个插件](http://www.vim.org/scripts/script.php?script_id=5206)前一段时间.另见[这个问题和我对它的回答](http://vi.stackexchange.com/q/2702/51).有关`autoread`如何工作及其局限性的更多详细信息. (2认同)

dim*_*mba 62

不知道自动,但你可以输入:

:e!
Run Code Online (Sandbox Code Playgroud)

重新加载文件


Pha*_*ang 30

将以下内容放入您的.vimrc:

" check one time after 4s of inactivity in normal mode
set autoread                                                                                                                                                                                    
au CursorHold * checktime                                                                                                                                                                       

  • "每4秒钟"不是真的.这只会在正常模式下4次不活动后检查*一次*.因此,如果您长时间不在另一个缓冲区中执行任何操作,它将不会更新,但如果您只是移动光标并等待4秒.另一种选择是手动调用":checktime"进行更新(设置自动缓冲后).不幸的是,在vim中似乎没有任何类型的民意支持,因此OP的问题没有真正的答案. (4认同)
  • 第一个答案对我不起作用,但这有效!:-) (2认同)

eli*_*eli 9

像@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窗口的左缓冲区中工作