我在 vim 脚本中定义以下语法规则:
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
但它的行为方式仍然完全相同。
那么,如何使用两个语法匹配来独立更改同一字符的背景和前景?
最佳答案
你不能。对于每个字符,Vim 仅使用一个特定的突出显示组,该突出显示组由最后一个“最内部”非透明语法组匹配确定。
要解决此问题,请定义组合的突出显示组和相应的 :syntax
命令。
:hi MyBoldRed cterm=bold ctermfg=red gui=bold guifg=#ff0000
一些语法(例如 $VIMRUNTIME/syntax/html.vim
和各种 Wiki 格式)使用它来组合粗体、斜体和下划线,但此后它会变得乏味且重复。但请记住,Vim 并不适合所见即所得;它不是为所见即所得而设计的。语法高亮只是提供一些提示。
编辑:有一个 patch proposed这将为 :syntax
命令添加一个 combine
修饰符;它在 Bram 的待办事项列表中。
关于vim - 将两个 vim 语法匹配叠加在同一个字符上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974439/