如何语法高亮 vim 中多个 space 分隔的字段?
How to syntax highlight multiple-space-separated fields in vim?
我有一个跟踪格式,其中包含 space 分隔的字段,但它们之间的 space 数量未知,例如:
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 等。
要获得灵感,请将此文本放入缓冲区并键入 /^\s*\zs[^ ]\+
。此模式 select 是第一个字段。要 select 第二个使用此:^\s*[^ ]\+ \+\zs[^ ]\+
。对于 select 第三个使用此:^\s*[^ ]\+ \+[^ ]\+ \+\zs[^ ]\+
等等。 \zs
不突出前面的原子。要对此使用语法:
syntax match {group} /{pattern}/
例如:
syntax match Keyword /^\s*\zs[^ ]\+/
以下模式将匹配第一个非空白组,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
我有一个跟踪格式,其中包含 space 分隔的字段,但它们之间的 space 数量未知,例如:
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 等。
要获得灵感,请将此文本放入缓冲区并键入 /^\s*\zs[^ ]\+
。此模式 select 是第一个字段。要 select 第二个使用此:^\s*[^ ]\+ \+\zs[^ ]\+
。对于 select 第三个使用此:^\s*[^ ]\+ \+[^ ]\+ \+\zs[^ ]\+
等等。 \zs
不突出前面的原子。要对此使用语法:
syntax match {group} /{pattern}/
例如:
syntax match Keyword /^\s*\zs[^ ]\+/
以下模式将匹配第一个非空白组,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