我在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
但它仍然表现得完全相同。
那么,我怎么能用两个语法匹配来独立地改变同一个角色的背景和前景呢?
答案 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名单中。