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


12

我正在使用vim分析日志文件,格式看起来像这样

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

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


我不知道您如何在vim中执行此操作,但是如果您不介意创建临时文件,则可以运行cut -c36- logfile > logfile_with_first_35_chars_missing,然后对其进行检查。
沃里克

Answers:


7

您询问了如何隐藏前几个字母,而不是删除它们或将它们滚动到视线之外,因此下面是实际上如何隐藏它们的方法:

使用隐藏隐藏vim中的文本

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

隐藏每行的前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'


(让我知道它是否不会表现出这种情况-可能还有一些我不知道的设置-我将使其起作用。)


1
工作正常,我认为vim需要使用+conceal(mine is)选项进行编译才能起作用。set concealcursor=nc防止光标线扩展也不错。
user881300 2014年

是的,+conceal某些年来该功能选项是标准的。遗憾的是,它现在还不为人所知。这确实很棒而且很灵活。提供了许多新的选择...
Volker Siegel 2014年

8

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

:%!cut -b36-

通过cut命令运行缓冲区的内容,仅保留字节36及更高字节。%表示要运行整个缓冲区,并用输出替换其内容,然后!是filter命令,其余部分作为要运行的程序。除非您随后将缓冲区保存在顶部,否则这不会修改基础文件。

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


然后用%!cat %它取回来?这很好用,我可以使用a map在这两者之间切换
user881300

是的,只要您有一个支持备份的真实文件,它就可以工作。
Michael Homer

3
@Michael Homer:现在可以使用Unicode字符了。
cuonglm

6

我认为更符合您需求的是水平滚动

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

首先:set nowrap禁用换行。然后按z35滚动35个泊车位。


这在阅读日志时非常有用,谢谢!
Fabio F.

好的,非常适合单个页面,但是...如何在不使光标再次跳到行首的情况下向下翻页或向上翻页?
elysch

刚刚在@ user2987828答案中找到了操作方法:使用:set nosol
elysch

将光标放在要隐藏的最后一个字符上。然后输入...[Esc] z s
roblogic '18年

2

在命令方式下,尝试:

:%s/^.\{35}//
  • %s/pat/sub/:用sub替换每次出现的pat
  • ^.\{35}:匹配行的前35个字符

此命令删除每行的前35个字符。您可以在中阅读:h regular-expression有关正则表达式的更多详细信息vim


1

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

:set nowrap
zs

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

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

g0命令将把光标移到第一可见列,其中包含L。

如果有任何键将光标从可见列向左或向右移动,则可见窗口将移动。


然后g0命令会将光标移动到第一列可见的字段
elysch
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.