use*_*898 5 c syntax vim function
我正在自定义标准的"c.vim"语法文件,以便调整我的C代码的可视化.我想区分"被调用函数"的颜色与"声明函数"之一.
例:
int declared_function()
{
int m;
m = called_function();
return (m)
}
Run Code Online (Sandbox Code Playgroud)
我深入阅读了VIM文档以及数百万个论坛和谷歌搜索结果,但我尝试过的所有解决方案都无效.
要恢复,我这样做了:
我以递归方式定义了一个区域,以便考虑大括号内的所有代码:
syn region Body start="{" end="}" contains=Body
Run Code Online (Sandbox Code Playgroud)
然后我通过VIM模式定义了一般函数语法:
syn match cFunction "\<\h\w*\>\(\s\|\n\)*("me=e-1 contains=cType,cDelimiter,cDefine
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我认为我可以在.vimrc文件中的"if else"条件中将两者合并......但是经过一整天的测试失败后,我需要有人的帮助,他可以告诉我是否可能以及如何去做吧.
谢谢大家.
你们非常接近。首先,您不需要递归定义,但在其中包含所有其他顶级 C 语法元素,以及您将为被调用函数定义的特殊组:
:syn region Body start="{" end="}" contains=TOP,cFunctionUse
Run Code Online (Sandbox Code Playgroud)
实际上,从头开始,默认$VIMRUNTIME/syntax/c.vim已经定义了一个cBlock语法组。
然后,定义该组中包含的不同cBlock语法组。
:syn match cFunctionUse "\<\h\w*\>\(\s\|\n\)*("me=e-1 contained containedin=cBlock contains=cType,cDelimiter,cDefine
Run Code Online (Sandbox Code Playgroud)
最后,为其链接或定义不同的突出显示组,以便它实际上看起来不同:
:hi link cFunctionUse Special
Run Code Online (Sandbox Code Playgroud)
您可以将它们放入 中~/.vim/after/syntax/c.vim,以便它们自动添加到默认的 C 语法中。