如何让tail -f用vim显示彩色输出?


9

在这个问题上,吉尔斯回答了

还有一种可能是tail -fEmacs shell缓冲区中运行并使用Emacs的语法着色功能。

因为我是vim用户,所以我想使用vim而不是emacs来做到这一点。vim
是否具有此功能?


2
Vim只是一个文本编辑器,与Emacs不同...但是,有一个可能有用的Vim 尾部插件
jasonwryan 2012年

也有vimpager插件可能做的伎俩
BSD

1
必须是文本编辑器吗?如果您只需要给文本加上颜色,则可以使用Clide
golimar 2012年

此外,还有针对Vim的TailBundle
jofel 2012年

还有一个类似的问题在这里。该解决方案的说明使用multitail以及如何配置它,也许它可能是有用的。
注销

Answers:


2

您可以编写一个多线程插件来在Python或Vim支持并具有线程的任何其他脚本中实时更改缓冲区。

但是据我所知,这仅在终端中有效。至少在X11中,如果GUI被另一个线程修改,则GUI版本将崩溃。

如果您接受其他程序,则grcccze能够为流着色。


0

我喜欢它简短,没有太多的黑客攻击或外部脚本。您可以在需要时从ex(whitin vim)运行此oneliner(或在打开日志文件时将每个命令放在vimrc中。)

:set autoread | au CursorHold * checktime | call feedkeys("lh")

另外,您可以:set syntax=logtalk为日志着色

(如果您想(几乎)跳到文件末尾,只需在Feed键中使用“ G”而不是“ lh”)

说明:

  • 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可以做什么:)

*从这个答案(指的由一个答案PhanHaiQuang和评论flukus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.