В VIM: Как выделить «локальные переменные» в файле «C» - PullRequest
2 голосов
/ 07 августа 2009

Я выделил все символы, используя теги file & highlight option.

Но я не смог выделить мои локальные переменные.

У меня есть идея, что VIM уже поддерживает автозаполнение ключевых слов для текущего файла, оно выполняет автозаполнение моей локальной переменной, поэтому, если я получу список ключевых слов для моего текущего файла, я выделю эти ключевые слова используя команду "highlight" vim.

Но проблема в том, что я не знаю, как получить список ключевых слов для текущего файла.

1 Ответ

1 голос
/ 07 августа 2009

Вы можете выделить распознанные имена, используя файл тегов, если файл тегов генерируется с помощью --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 и т. Д.), Чтобы в полной мере использовать ее.

...