vim 作为 journalctl 的寻呼机

Posted

技术标签:

【中文标题】vim 作为 journalctl 的寻呼机【英文标题】:vim as pager for journalctl 【发布时间】:2021-09-20 12:08:34 【问题描述】:

我想使用 。有可能吗?如何实现?

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

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

你会如何在 vim 中阅读你的日记?

【问题讨论】:

我不会。 Vim 是一个文本编辑器。 @Pierre Vittet - 你没有告诉我尝试PAGER="vim -" journalctl的结果。您也没有说明为什么您无法使用export SYSTEMD_PAGER=vim. 这两个命令的结果是使用默认分页器而不是使用 vim 作为分页器调用 journalctl。 【参考方案1】:

尝试管道到vim:

journalctl -b | vim - 

使用优先级过滤输出

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

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

journalctl -b -p 3 | vim -

其中3 对应于错误。

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

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 转义码。

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

    指示 journalctl 输出 ANSI 转义码。 在 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

或者,如果输出到外壳,日志将在那里用颜色编码:

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

在 Vim 中格式化 ANSI 转义码

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

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

在 shell 中,使用vim 打开下载的文件:

vim AnsiEsc.vba.gz

然后,在vim 中安装插件:

:so %

安装插件后可以退出vim

:q 

颜色示例

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

从外壳,将颜色编码的日志通过管道传输到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

【讨论】:

以上是关于vim 作为 journalctl 的寻呼机的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在vim窗口中显示可怕的“更多”列表?

如何在 `less` 中避免`Pattern not found` 消息和屏幕重绘(作为 Git 寻呼机)

Git grep 遍历所有分支中的所有提交并在寻呼机中打开?

Android - 在寻呼机中获取片段的上下文

查看具有单个背景图片的寻呼机android

(转)如何使用Journalctl查看并操作Systemd日志