vim:隐藏文件中所有行的前 n 个字母

use*_*300 13 vim

我正在使用 vim 分析日志文件,格式如下

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

因为大多数时候我不关心日期和时间。我想隐藏它们,只关注 Name 和 LogText 列(以节省一些屏幕空间)。因为前三列总是占据一行中的前 35 个字母。有没有办法让 vim 不显示每行的前 35 个字母?

Mic*_*mer 9

使用 vim 的过滤功能。跑:

:%!cut -b36-
Run Code Online (Sandbox Code Playgroud)

通过cut命令运行缓冲区的内容,仅保留字节 36 及以后的字节。%意味着运行整个缓冲区并用输出替换其内容,然后!是过滤器命令,该行的其余部分作为要运行的程序。这不会修改底层文件,除非您将缓冲区保存在顶部。

要获取原始未修剪的缓冲区,您可以使用:e,前提是它由真实文件支持。

  • @Michael Homer:现在可以使用 unicode 字符了。 (3认同)

Vol*_*gel 9

您询问了如何隐藏第一个字母,而不是删除它们,或者将它们滚动到视线之外 - 所以这里是如何真正隐藏它们:

使用隐藏在 vim 中隐藏文本

您可以使用匹配,结合语法高亮和隐藏功能实际上不在行内显示匹配的字符。

隐藏每行的前 25 个字符:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2
Run Code Online (Sandbox Code Playgroud)

要仅隐藏带有日期标点符号的行:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal
Run Code Online (Sandbox Code Playgroud)

取消隐藏:

:syn clear Concealed
:set conceallevel=0
Run Code Online (Sandbox Code Playgroud)

通常看起来像这样:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
Run Code Online (Sandbox Code Playgroud)

执行前两个命令后将如下所示:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
Run Code Online (Sandbox Code Playgroud)


另见 - 内部vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(让我知道它的行为是否像那样 - 可能还有一些我不知道的设置 - 我会让它工作。)


bah*_*mat 6

我认为更符合您正在寻找的是水平滚动。

Z 是水平滚动命令键,后跟使用向左或向右箭头键移动的方向。

首先:set nowrap禁用换行。然后按z, 35,→滚动 35 个空格。