在 VIM 中:如何突出显示“C”文件中的“局部变量”

问题描述 投票:0回答:2

我通过使用标签文件和突出显示选项突出显示了所有符号。

但是我无法突出显示我的局部变量。

我有一个想法,那就是,VIM 已经支持自动完成当前文件的关键字,它会自动完成我的局部变量,因此,如果我获得当前文件的关键字列表,那么我将使用“突出显示这些关键字”突出显示“vim 命令。

但问题是,我不知道如何获取当前文件的关键字列表。

vim variables local highlight keyword
2个回答
1
投票

您可以使用标签文件突出显示已识别的名称,只要标签文件是使用

--c-kinds=+l
生成的,以确保它包含局部变量。然而,目前还没有一种现实的方法来识别这些变量的范围(ctags 没有提供太多信息),因此 Vim 不会区分一个函数和另一个函数中的变量:

void main(void)
{
    int MyVariable; // Highlighted

}

int MyFunction(void)
{
    int MyFunctionVariable; // Highlighted

    MyVariable = 1; // Syntax error, but still highlighted
}

可以通过更详细地解析 C 文件并为每个函数创建语法区域来完成,但这远非易事(并且它与像 rainbow.vim 这样的插件不兼容,因为 Vim 不支持重叠地区)。

相关说明,您可能也对我的标签突出显示插件感兴趣可在此处使用。它将突出显示局部变量(如果运行

b:TypesFileIncludeLocals
时在打开的缓冲区中将
1
设置为
:UpdateTypesFile
),但它不处理局部变量的范围。然而,它确实提供了比
:help tag-highlight
中建议的突出显示更多的突出显示颜色变化。请注意,您的配色方案必须为许多额外组(例如
GlobalVariable
LocalVariable
DefinedName
等)定义突出显示,才能充分利用它。


0
投票

很难找到一种方法在 vim 中对自定义类型进行高亮显示。但是,我认为最好找到用户定义类型(udt)并匹配模式。 原因是 vim 在为用户类型定义模式的过程中不应用复杂的正则表达式。当然,亮点较少也是可以的。 我推荐udt方法。 -- 乌特----------------- https://github.com/vim-scripts/User-Defined-Type-Highlighter/blob/master/ftplugin/cpp/udt.vim

-- 更少的模式 ----------------- (用户类型,用户类型,正常)=
([[:alpha:]_](?:[^[:punct:][:space:]]|[_])*) ((?:<.*>)?) (\s+(?=[*&]*[[:alpha:]_][^[:punct:][:space:]]*\s*[[:punct:]\[\]]+))

© www.soinside.com 2019 - 2024. All rights reserved.