使用VIM作为日志文件查看器

时间:2009-04-24 10:57:45

标签: vim logging

我想将VIM用作日志文件查看器。是否可以在常规时间间隔(~1s)内重新加载当前文件?

5 个答案:

答案 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”从日志中解析文件名还有一个额外的好处。