我想设置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_]+"
但它不起作用。还有其他方法可以做到这一点吗?
答案 0 :(得分:5)
我通常会通过nextgroup=
使用它,以避免Vim尝试在任何地方解析它:
syn keyword cStructure struct nextgroup=cStructName skipwhite
syn match cStructName "\h\w*" contained
hi link cStructName cType
但不幸的是,syntax/c.vim
有contains=ALLBUT
个条款,然后几乎在所有地方再次引入这个条款。
因此,我认为你必须采用第二种方法。缺少什么(使其有效)是清除原始定义,因为关键字匹配的优先级始终高于:syn-match
:
syn match cType "\vstruct\s+[a-zA-Z0-9_]+"
syn clear cStructure