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

Dmi*_*ank 2 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_]+"
Run Code Online (Sandbox Code Playgroud)

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

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

因此,似乎\@<=regexp构造太慢而无法在语法脚本中使用.我试着将它与struct自己匹配:

syn match cType   "\vstruct\s+[a-zA-Z0-9_]+"
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 5

我通常会使用这个nextgroup=,以避免Vim试图解析这个地方:

syn keyword cStructure struct nextgroup=cStructName skipwhite
syn match cStructName "\h\w*" contained
hi link cStructName cType
Run Code Online (Sandbox Code Playgroud)

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

因此,我认为你必须采用第二种方法.缺少什么(使它工作)是清除原始定义,因为关键字匹配始终具有比:syn-match以下更高的优先级:

syn match cType   "\vstruct\s+[a-zA-Z0-9_]+"
syn clear cStructure
Run Code Online (Sandbox Code Playgroud)