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