Vim自定义语法,不包括区域中的先前匹配突出显示

时间:2015-03-06 17:44:15

标签: vim vim-syntax-highlighting

我正在为一个文件编写一个vim语法高亮显示脚本,该文件使用*来表示注释的开头,除非被{}包围。即。

* This is a comment, bellow is math
{ x_variable * y_variable + 10.0 } 

我想只突出括号,忽略内部注释突出显示,同时仍然保持数字突出显示。

到目前为止,我有:

syn match mathSym "[{}]"
syn region mathRegion start=+{+ send=+}+ contains=numberHi
syn match commentHi "\*.*$" display contains=@Spell

hi link commentHi Comment
hi link mathSym Statement
hi link mathRegion Normal

我不确定这是否是正确的方法。它似乎忽略*作为注释,并提供数字突出显示,但没有突出显示括号。

我试过

region mathRegion start=+{+ send=+}+ contains=numberHi, mathSym

但最终会将文件中的所有突出显示设置为Normal

1 个答案:

答案 0 :(得分:0)

您的问题缺少numberHi内容,但这应该可以解决问题:

syn region mathRegion matchgroup=mathSym start=+{+ end=+}+ contains=numberHi,mathSym
syn match commentHi "\*.*$" display contains=@Spell

hi link commentHi Comment
hi link mathSym Statement
  • 您可以使用mathSym突出显示开头和结尾,而不是matchgroup=mathSym的单独匹配。
  • 此外,您无需将mathRegionNormal相关联;只需将它用于结构。
  • x * y内的mathRegion不匹配,因为此处未包含{{1}}。我没有看到任何问题。

PS:你知道SyntaxAttr.vim - Show syntax highlighting attributes of character under cursor插件吗?在编写语法时,这是一个很好的帮助。