在同一个字符上叠加两个vim语法匹配

时间:2013-04-12 14:48:45

标签: vim vim-syntax-highlighting

我在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上的帮助,以及question的答案,我尝试使用syn match参数:

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

但它仍然表现得完全相同。

那么,我怎么能用两个语法匹配来独立地改变同一个角色的背景和前景呢?

1 个答案:

答案 0 :(得分:2)

你做不到。对于每个字符,Vim仅使用一个特定的突出显示组,由最后一个“最内部”非透明语法组匹配确定。

要解决此问题,请定义组合的突出显示组和相应的:syntax命令。

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

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

修改patch proposed会为combine命令添加:syntax修饰符;这是在Bram的Todo名单中。