如何在vim中突出显示多个空格分隔的字段?

时间:2017-12-28 19:08:16

标签: vim vim-syntax-highlighting

我的跟踪格式有空格分隔的字段,但它们之间的空格数不明,例如:

  0.0430   22.0  83012/84348 mt-client * | |        clearing session cache
  0.0430    0.0  83012/84348 mt-client * | |        moving 1 sessions into watched list
  0.0430    0.0  83012/84348 mt-client * | |        session 8 added to watched list
  0.0430    0.0  83012/84348 conncache - | --27.0 ConnectionCache::ResetEverything

我希望根据字段编号在vim中使用语法高亮显示 - 例如,awk会调用$ 1,$ 2等等。

2 个答案:

答案 0 :(得分:4)

以下模式将匹配第一个非空白组,awk调用$ 1:

:syn match Keyword /\v(^\s*(\S+\s+){0})@<=\S+/

您可以将{0}更改为{1}以匹配第二组,将{i-1}更改为$i组。

在突出显示之前,您可以自定义自己的突出显示组。

例如:

:highlight Group0 guifg=blue
:highlight Group1 ctermfg=black ctermbg=white

第一个用于gui模式,第二个用于cli模式。或者你可以同时设置两者。

将突出显示规则保存到文件

您可以将自定义规则保存到文件中,以便日后轻松突出显示此类字符串。

将以下内容保存到my_highlight.vim

"customize highlight groups
highlight Group0 guifg=blue
highlight Group1 guifg=green
highlight Group2 guifg=yellow
highlight Group3 guifg=orange
highlight Group4 guifg=purple

"highlight groups
syn match Group0 /\v(^\s*(\S+\s+){0})@<=\S+/
syn match Group1 /\v(^\s*(\S+\s+){1})@<=\S+/
syn match Group2 /\v(^\s*(\S+\s+){2})@<=\S+/
syn match Group3 /\v(^\s*(\S+\s+){3})@<=\S+/
syn match Group4 /\v(^\s*(\S+\s+){4})@<=\S+/

当您需要突出显示时,只需执行以下命令:

:source my_highlight.vim

答案 1 :(得分:1)

要想到这个文本放入缓冲区并输入/^\s*\zs[^ ]\+。此模式选择第一个字段。要选择第二个,请使用:^\s*[^ ]\+ \+\zs[^ ]\+。要选择第三个,请使用:^\s*[^ ]\+ \+[^ ]\+ \+\zs[^ ]\+,依此类推。 \zs不突出显示前面的原子。要对此使用语法:

syntax match {group} /{pattern}/

例如:

syntax match Keyword /^\s*\zs[^ ]\+/