2

我想用“virtual”开始一个区域以突出显示所有具有不同颜色的虚拟方法,但是在 cpp.vim 文件中已经将 virtual 定义为关键字,因此永远不会执行区域匹配。我尝试了以下

syn region   cVirtualMethod   start="virtual" end=";" contains=cppType
hi cVirtualMethod ctermfg=red

但它不起作用。但是,如果我从 cppType 中删除 virtual,它确实如此,但它会突出显示整行(公平地说,我更喜欢方法名称,但它也很好)。

有没有办法离开 cpp.vim 虚拟突出显示(所以虚拟最终会变成绿色)并只突出显示方法名称?

4

2 回答 2

1

语法关键字始终优先于区域,因此无法将virtual其作为语法关键字删除。

您可以通过为区域开始(而不是结束;这就是反向参数顺序的原因)定义一个突出显示组来保持突出显示:

:syn region   cVirtualMethod end=";" matchgroup=cppType start="\<virtual\>"

尽管如此,整个内部区域仍将突出显示。为避免这种情况,您可以添加一个:syn-match仅匹配方法名称的包含项,将其包含在上述区域中,然后将其:highlight放在该区域而不是该区域。

于 2013-03-20T13:15:40.057 回答
0

你能测试一下这对你有用吗?

hi! virtualMethod ctermfg=red
call matchadd("virtualMethod", "virtual.*;")

如果是这样,您可以为该matchadd调用添加 autocmd

于 2013-03-20T12:52:02.293 回答