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)
但它不起作用.还有其他方法可以做到这一点吗?
我通常会使用这个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.vim
有contains=ALLBUT
条款然后几乎在所有地方再次引入这个条款.
因此,我认为你必须采用第二种方法.缺少什么(使它工作)是清除原始定义,因为关键字匹配始终具有比:syn-match
以下更高的优先级:
syn match cType "\vstruct\s+[a-zA-Z0-9_]+"
syn clear cStructure
Run Code Online (Sandbox Code Playgroud)