vim 作为 journalctl 的寻呼机

vim as pager for journalctl

我想使用 vim 作为 journalctl 的寻呼机。这可能吗?如何实现?

我在fedora上,当我天真地打开journalctl时,它是一个默认的寻呼机,我无法快速转到最后一行。 我试过 PAGER="vim -" journalctl 在论坛上找到的,没有任何改变。

使用 export SYSTEMD_PAGER=cat 有效地使用 cat 作为寻呼机,但我一直无法使用 export SYSTEMD_PAGER=vim

您会如何在 vim 内阅读您的日记?

尝试管道连接到 vim:

journalctl -b | vim - 

使用优先级过滤输出

通常,journalctl 会根据日志条目是错误、警告、信息等对它们进行颜色编码。这些颜色对应于 优先级 。这种颜色编码不会出现在通过管道传输到 vim.

的日志中

搜索具有特定优先级的日志的一种简单方法是使用 journalctl 选项 -p:

journalctl -b -p 3 | vim -

其中 3 对应错误。

您可以使用此 table 来确定要使用的优先级。

Priority Log Level
emerg 0
alert 1
crit 2
err 3
warning 4
notice 5
info 6
debug 7

有关详细信息,请参阅 journalctl 手册页中的 --priority= 选项。

在 Vim

中使用颜色编码

如果您仍想在 Vim 中查看颜色编码的日志,那是可以的。

其基础是 ANSI 转义码。没有必要了解任何关于 ANSI 转义码的知识。

但是,要让颜色起作用,我们需要解决两个问题:

  1. 指示 journalctl 输出 ANSI 转义码。
  2. 在 Vim 中格式化 ANSI 转义码。

指示 journalctl 输出 ANSI 转义码

journalctl 的手册页提到了一个环境变量,它将产生所需的输出。

在 shell:

中将 SYSTEMD_COLORS 环境变量设置为 true
export SYSTEMD_COLORS=true

您可以将此变量添加到您的 ~/.bashrc

中,使其永久化

现在,当您 运行 journalctl 时,您会注意到 vim:

中的 ANSI 转义码
journalctl -b -p 4 | vim -

ANSI 转义码示例:

^[[0;1;38;5;185m

或者,如果输出到 shell,日志将在那里进行颜色编码:

journalctl -b -p 4 -n 10 --no-pager

在 Vim

中格式化 ANSI 转义码

Vim 需要一个插件来解释 ANSI 转义码。可以在下面的链接中找到更多信息。

可以找到您需要的文件here(直接)。

从shell,用vim打开下载的文件:

vim AnsiEsc.vba.gz

然后,在 vim 内安装插件:

:so %

安装插件后可以退出vim:

:q 

颜色示例

设置环境变量并安装插件后,尝试查看彩色编码日志。

从 shell,将颜色编码的日志传输到 vim

journalctl -b -p 4 | vim -

来自 vim,激活插件以格式化日志:

:AnsiEsc

现在您应该会在 vim 中看到彩色编码的 systemd 日志。

此致,

参考资料

journalctl | Arch manual pages

ANSI escape code | Wikipedia

env, setenv, & export | Unix & Linux

bash: true or false | Stack Overflow

Permanently Setting Environmental Variables | DigitalOcean

Can colorized output be captured via shell redirect? | Stack Overflow

ANSI Color Codes in VIM | Stack Overflow

Introduction to Plugins | Vim Online Help

AnsiEsc Plugin | vim.org(过时AnsiEsc.vba.gz

AnsiEsc | Dr Chip's Vim Page(在此处查找最新的 AnsiEsc.vba.gz。)

AnsiEsc Manual | Dr Chip's Vim Page

vimball | vim.org

:so | Vim Online Help

% | Vim Online Help