2014-11-14 3 views
0

Я использую плагин TagHighlight в Vim, чтобы получить подсветку моих пользовательских классов и членов C++.Vim не выделяет некоторые слова

Этот трюк, который я нашел there, позволил мне лучше понять, как Vim рассмотрел определенные слова. В некотором смысле я могу задать вопрос сейчас: «Хорошо, почему вы положили это слово в зеленый цвет?»

Самое странное в том, что он работает хорошо, для (многих) случайных кроме случаев, см:

enter image description here

Моих библиотеки имен sf была выделена, и Вьет говорит hi<CTagsNamespace> trans<CTagsNamespace> lo<Constant>, когда я спрашиваю его, почему, Великий.

Но std не имеет, и ответ hi<> trans<cParen> lo<>.

angle Моя переменная была замечена как hi<CTagsMember> trans<CTagsMember> lo<Member>, но его мало братан»speed не имеет (почему нет?): Это hi<> trans<cBlock> lo<>.

Итак .. почему? Есть ли способ, которым Vim может действительно прочитать и понять весь мой проект, а затем подчеркнуть его надлежащим образом?

ответ

1

Из описания TagHighlight:

TagHighlight это плагин, который выделяет имена классов, переменных, типов и т.д. в исходном коде в Vim. Это ускоряет и ускоряет ошибок пятна в вашем коде. С использованием буйных ctags и разбора вывод, typedefs, #defines, перечисляемые имена и т. Д. Все ясно выделены разными цветами.

У вас, вероятно, нет источника пространства имен std, поэтому нет тегов и, следовательно, нет подсветки.

Ваши ctags, вероятно, не генерируют теги для локальных переменных, поэтому скорость не выделяется. Но у вас, вероятно, есть переменная с именованными углами как глобальная или переменная-член, поэтому локальный переменный угол подсвечивается случайно.

И не вините Vim, это, вероятно, что-то делать плагин и теги :)

+0

О, я никогда не хотел обвинить Vim (я ф + кг люблю его!). Если я хорошо понимаю, мне просто нужно найти поддержку пространства имен 'std' (я думаю, что« TagHighlight »фактически предоставляет его), и принять некоторые случайные неверные интерпретации. Хорошо! :) .. Просто чтобы убедиться, что тогда (и я не хочу винить в этом ничего): это означает, что Vim на самом деле не понимает * Я использую 'angle' как обычную локальную переменную. И, кажется, нет никакого способа «научить» это еще:/ –

+1

@ Iago-lito Я не читаю код плагина, но я считаю, что он использует список идентификаторов для применения бликов; список получается из ctags, поэтому, если ctags не выполняется по std-коду (или, по крайней мере, заголовкам), он не будет присутствовать в списке для выделения. Из этого списка, вероятно, выделяются все слова на экране, которые соответствуют этому списку, - он не проверяет контекст, поэтому он не может понять, что локальная переменная имеет то же имя, что и поле участника. – mMontu

Смежные вопросы