c - VIM 语法 : conditional function coloring

标签 c function vim syntax

我正在自定义标准的“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 语法元素,以及您将为被调用函数定义的特殊组:

: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 语法中。

关于c - VIM 语法 : conditional function coloring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891069/

相关文章:

python - 显示 pygtk 小部件后 5 秒运行函数

html - 有什么方法可以根据 Vim 中的语法缩进自动换行吗?

c++ - u_int32_t 与 bpf_u_int32

CUDA内核参数不兼容

c++ - "argv[0] = name-of-executable"是公认的标准还是只是一个常见的约定?

function - React 函数未定义

C 函数到宏

PHP 全局或 $GLOBALS

linux - 前置视觉 block 在 vim 中不起作用

vim - 如何在 vim 中捕获 shift-tab