Vim:在C中,将结构名称突出显示为cType

时间:2014-09-01 09:26:43

标签: vim struct syntax-highlighting

我想设置Vim以突出显示struct名称作为C类型,因此,我在语法脚本上有点破解:

syn match cType   "\v(struct\s+)@<=[a-zA-Z0-9_]+"
syn match cType   "\v(enum\s+)@<=[a-zA-Z0-9_]+"

它有效,但它显着减慢了我的vim!正如我刚刚打字的那样,Vim对Intel Core2 Duo 2.53 GHz的响应速度要小得多。

我已经评论了我的添加内容,现在它再次运行得很快。

所以,似乎\@<= regexp构造太慢而无法在语法脚本中使用。我试图将它与struct本身匹配:

syn match cType   "\vstruct\s+[a-zA-Z0-9_]+"

但它不起作用。还有其他方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:5)

我通常会通过nextgroup=使用它,以避免Vim尝试在任何地方解析它:

syn keyword cStructure struct nextgroup=cStructName skipwhite
syn match cStructName "\h\w*" contained
hi link cStructName cType

但不幸的是,syntax/c.vimcontains=ALLBUT个条款,然后几乎在所有地方再次引入这个条款。

因此,我认为你必须采用第二种方法。缺少什么(使其有效)是清除原始定义,因为关键字匹配的优先级始终高于:syn-match

syn match cType   "\vstruct\s+[a-zA-Z0-9_]+"
syn clear cStructure