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

标签 vim vim-syntax-highlighting

我在 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/

相关文章:

regex - Vimscript : get all matches of a regex over a string

Vim 8.0 扩展了 scheme 的语法高亮

Vim 语法高亮不起作用

vim - 更改 vim yankring 历史文件的位置

python - vim : Gundo error

vim 语法 : match only when between other matches

regex - Vim 正则表达式跳过定界符

regex - 用于 git 合并冲突的 Vim 正则表达式

vim - 如何在 Vim 备份文件名前添加字符?

vim - 如何使用 vim 脚本将文本附加到文件?