我想将VIM用作日志文件查看器。是否可以在常规时间间隔(~1s)内重新加载当前文件?
答案 0 :(得分:9)
使用:set autoread
答案 1 :(得分:5)
见VIM tip。它提供拖尾(如tail -f)和日志行编号
答案 2 :(得分:2)
我喜欢它简短,没有很多黑客或外部脚本。 您可以在需要时从ex(whithin vim)运行此oneliner(或将每个命令放在vimrc中,以便打开日志文件时。)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(如果你想(几乎)跳到文件的末尾,只需使用" G"而不是" lh"使用feedkeys)
说明:
autoread
:从外部更改时读取文件(但它本身不起作用,没有内部计时器或类似的东西。它只会在vim执行操作时读取文件,如ex :!
CursorHold * checktime
:当用户未将光标移动updatetime
中指定的时间(默认为4000毫秒)时执行checktime
,这将检查从文件外部更改call feedkeys("lh")
:光标向左,向右和向后移动。没有任何反应(......这意味着,CursorHold
被触发,这意味着我们有一个循环)要在使用call feedkeys("G")
时停止滚动,请执行:set noautoread
- 现在vim将告知,文件已更改并询问是否要阅读更改
我喜欢在vim(而不是tail -f)中观看日志文件的想法,例如当你在没有screen / tmux的ssh会话中工作时。另外,如果需要,你可以直接从日志文件中复制,或直接保存输出或者......你可以用vim做什么:)
*来自此answer(参考PhanHaiQuang的答案和flukus的评论)
答案 3 :(得分:0)
使用Vim 8中的计时器,现在可以更简单,更省力。例如:
:set autoread
:function! Tailf(id)
: checkt
: $
:endfunc
:let timer_id = timer_start(4000, 'Tailf', {"repeat":-1})
这使vim每4秒重新读取一次整个日志。出于很多目的,这很好,但不能用于大型(例如几个GB)日志文件。还有其他功能,例如作业和渠道,可用于更复杂的日志读取。
答案 4 :(得分:0)
asyncrun.vim 可让您运行程序并查看 quickfix 中的实时输出(本质上是 JohnLittle 的回答,但使用 setqflist()
而不是 Tailf()
)。您可以将它与 tail
一起使用(我使用的是 Windows,而我的 tail
来自我的 git 安装):
AsyncRun tail -f C:\logs\plugin-info.log
使用“errorformat”从日志中解析文件名还有一个额外的好处。