2

我在 vimscript 中定义了以下语法规则:

hi MyBold term=bold   gui=bold
hi MyRed  ctermfg=red guifg=#ff0000

稍后,我想将两个高光应用到同一个角色。所以基本上,我尝试了以下方法:

syn match MyRed  /\%1c\%1l./
syn match MyBold /\%1c\%1l./

但随后第二场比赛取代了第一场比赛。因此,我进一步阅读了有关 的帮助以及该问题syntax match的答案,并尝试使用参数:syn match

syn match MyRed  /\%1c\%1l./ contains=CONTAINED
syn match MyBold /\%1c\%1l./ contained

但它的行为仍然完全相同。

那么,如何使用两个语法匹配来独立更改同一字符的背景和前景呢?

4

1 回答 1

2

你不能。对于每个字符,Vim 只使用一个特定的高亮组,由最后一个“最内部”非透明语法组匹配决定。

要解决此问题,请定义组合的高亮组和相应的:syntax命令。

:hi MyBoldRed cterm=bold ctermfg=red gui=bold guifg=#ff0000

一些语法(例如$VIMRUNTIME/syntax/html.vim,以及各种 Wiki 格式)使用它来组合粗体、斜体和下划线,但之后会变得乏味和重复。但请记住,Vim 不是为所见即所得的。语法高亮只是提供一些提示。

编辑提出了一个补丁,可以为命令添加combine修饰符;:syntax它在 Bram 的待办事项列表中。

于 2013-04-12T14:59:26.743 回答