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

时间:2010-01-28 21:02:15

标签: vim

我的问题类似于how to monitor a text file in realtime 但我想在vim中做到这一点。我知道我可以使用tail -f sample.xml文件读取打开的文件,当新内容写入文件时,它还会将新内容写入我的屏幕。在更新文件时,我可以让vim自动填充新数据吗?

8 个答案:

答案 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)

像@flukus在previous answer的评论中说的那样你可以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)

还有一个插件:

https://github.com/djoshea/vim-autoread

这是我在OSX上完成这项工作的唯一方法。

答案 7 :(得分:0)

VIM会在文件更新时向您发出警告,以便您不会覆盖自打开文件后所做的更改。它会在此时提示您重新加载文件。