我通过使用标签文件和突出显示选项突出显示了所有符号。
但是我无法突出显示我的局部变量。
我有一个想法,那就是,VIM 已经支持自动完成当前文件的关键字,它会自动完成我的局部变量,因此,如果我获得当前文件的关键字列表,那么我将使用“突出显示这些关键字”突出显示“vim 命令。
但问题是,我不知道如何获取当前文件的关键字列表。
您可以使用标签文件突出显示已识别的名称,只要标签文件是使用
--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
等)定义突出显示,才能充分利用它。
([[:alpha:]_](?:[^[:punct:][:space:]]|[_])*) ((?:<.*>)?) (\s+(?=[*&]*[[:alpha:]_][^[:punct:][:space:]]*\s*[[:punct:]\[\]]+))