【问题标题】:Vim syntax matchVim 语法匹配
【发布时间】:2013-02-22 17:55:01
【问题描述】:

我正在为我们在 VIM 中使用的专有 C 扩展实现语法高亮。
语法是这样的:

int __event(foobar) my_foobar_function()
{
    //whatever
    if(foobar)
        // do something
}

现在我想做的是突出显示 __event(foobar),所以我写了这个:

syn region xREG start=/__event(/ end=/)/ contains=xFOO
syn keyword xFOO foobar contained

hi xREG ctermfg=darkblue
hi xFOO ctermfg=cyan

这会正确突出显示 __event(),但是,if(foobar) 中的 foobar 也会突出显示。

我的问题是如何限制 xFOO 组仅在 xREG 中突出显示,而在其他任何地方都没有。

谢谢。

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

    当你扩展现有的语法(如C)时,你需要考虑现有的语法项。来自syntax/c.vim 的以下行通过ALLBUT= 包含您的xFOO 组:

    syn region  cParen      transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
    

    幸运的是,它提供了一个扩展点:您必须将您的组添加到@cParenGroup 集群:

    syn cluster cParenGroup add=xFoo
    

    这应该可以解决问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多