【问题标题】:VIM syntax: conditional function coloringVIM 语法:条件函数着色
【发布时间】:2014-01-02 20:16:53
【问题描述】:

我正在定制标准的“c.vim”语法文件,以调整我的 C 代码的可视化。 我想将“调用函数”的颜色与“声明函数”的颜色区分开来。

示例:

int declared_function()
{
    int m;

    m = called_function();
    return (m)
}

我深入阅读了 VIM 文档,以及数百万个论坛和谷歌搜索结果,但我尝试的所有解决方案都不起作用。

要恢复,我这样做了:

我以递归方式定义了一个区域,以便考虑大括号内的所有代码:

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”条件将两者结合起来......但是经过一整天的失败测试后,我需要有人的帮助,他可以告诉我它是否可能以及如何去做。

谢谢大家。

【问题讨论】:

    标签: c function vim syntax


    【解决方案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 语法中。

    【讨论】:

    • 感谢您的帮助。但它仍然不起作用。同色的所有功能我还是有的(但是学会了TOP的使用)
    • 很抱歉;我有额外的语法定义愚弄了我。实际上,解决方案更简单,因为已经有一个cBlock 组,所以你根本不需要Body!请参阅我的更新答案。
    • 是的。它有效,并且比我的解决方法更优雅(我保留了递归形式,并手动添加了我需要的所有东西,从你的提示中获取灵感)。但是你的解决方案肯定更聪明:我明天会实施。最后,在完成了整个语法文档之后,我发现 vim 比我想象的还要强大。
    • 终于不行了。我认为问题在于 $VIMRUNTIME/syntax/c.vim 中定义的 cBlock 如果您尝试为其分配不同的背景(例如 gtermbg=11),您会看到它没有正确地强调它应该强调的内容.相反,如果我定义一个区域(例如我所做的 Body),它会专门强调函数的 body/
    • 不是高亮问题,而是cBlock默认定义为transparent?!如您所见,这项任务并非微不足道。也许你应该重新考虑这是否真的值得?!
    猜你喜欢
    • 2013-05-08
    • 2016-08-03
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2011-11-02
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多