我的跟踪格式有空格分隔的字段,但它们之间的空格数不明,例如:
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等等。
答案 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[^ ]\+/