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

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

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

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

因为大多数时候我并不关心日期和时间。我想隐藏它们并只关注名称和日志文本列(以节省一些屏幕空间)。由于前三列始终占据一行中的前 35 个字母。有没有办法让vim不显示每行的前35个字母?

答案1

您询问如何隐藏第一个字母,而不是删除它们或将它们滚动到看不见的地方 - 所以这里是如何实际隐藏它们:

使用 hide 隐藏 vim 中的文本

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

要隐藏每行的前 25 个字符:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

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

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

取消隐藏:

:syn clear Concealed
:set conceallevel=0

通常看起来像这样:

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

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

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


另请参阅 - 内部vim
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(如果它的行为不是这样,请告诉我 - 可能还有一些我不知道的设置 - 我会让它工作。)

答案2

使用vim的过滤功能。跑步:

:%!cut -b36-

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

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

答案3

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

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

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

答案4

有一个易于记忆的解决方案,无需修改缓冲区或文件。将光标放在L要查看的文件部分的第一个字符(在您的示例中)上,然后键入

:set nowrap
zs

zs命令将设置 vi,使光标处的字符出现在屏幕的第一列。确保您没有输入:set nosol配置文件。

g$命令会将光标移动到最后一个可见列。

g0命令会将光标移回到第一个可见列,即包含 L 的列。

如果任意键将光标向左或向右移动到可见列之外,则可见窗口将移动。

相关内容