Ответ 1
Я считаю, что подсветка по умолчанию для фигурных скобок стандартная в vim для C-кода или производных языков (они просто выделены как обычный текст). Вы можете определить свой собственный, используя что-то вроде:
:syn match Braces display '[{}()\[\]]'
:hi Braces guifg=red
или вы можете загрузить плагин подсветки радуги, который дает различные цвета для разных уровней отступов. См. Также мой ответ на этот вопрос.
:help :syn-match
:help hi
В действии есть снимок экрана ярлыка радужной скобки (с моей цветовой схемой Bandit) здесь.
Edit:
Чтобы узнать группу подсветки всего, что вас интересует, создайте это сопоставление:
:map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
(взято из здесь). Затем переместите курсор над тем, что вас интересует, и нажмите F3. Если он вообще не выделяется, Vim будет печатать:
hi<> trans<> lo<>
Если есть определенная группа выделения, вы получите что-то вроде этого (с помощью курсора над ключевым словом if
):
hi<cConditional> trans<cConditional> lo<Conditional>
который сообщает вам, что группа выделения называется cConditional
и что она связана (с :hi link
) с группой под названием Conditional
. С подсветкой радужной скобки вы можете получить что-то вроде cCurly1
, что означает ее внутри фигурной скобки, но без дополнительной подсветки.
Изменить 2:
Возможный сопоставитель (не очень хорошо протестированный):
let cOperatorList = '[-&|+<>=*/!~]' " A list of symbols that we don't want to immediately precede the operator
let cOperatorList .= '\@<!' " Negative look-behind (check that the preceding symbols aren't there)
let cOperatorList .= '\%(' " Beginning of a list of possible operators
let cOperatorList .= '\(' " First option, the following symbols...
let cOperatorList .= '[-&|+<>=]'
let cOperatorList .= '\)'
let cOperatorList .= '\1\?' " Followed by (optionally) the exact same symbol, so -, --, =, ==, &, && etc
let cOperatorList .= '\|' " Next option:
let cOperatorList .= '->' " Pointer dereference operator
let cOperatorList .= '\|' " Next option:
let cOperatorList .= '[-+*/%&^|!]=' " One of the listed symbols followed by an =, e.g. +=, -=, &= etc
let cOperatorList .= '\|' " Next option:
let cOperatorList .= '[*?,!~%]' " Some simple single character operators
let cOperatorList .= '\|' " Next option:
let cOperatorList .= '\(' " One of the shift characters:
let cOperatorList .= '[<>]'
let cOperatorList .= '\)'
let cOperatorList .= '\2' " Followed by another identical character, so << or >>...
let cOperatorList .= '=' " Followed by =, so <<= or >>=.
let cOperatorList .= '\)' " End of the long list of options
let cOperatorList .= '[-&|+<>=*/!~]' " The list of symbols that we don't want to follow
let cOperatorList .= '\@!' " Negative look-ahead (this and the \@<! prevent === etc from matching)
exe "syn match cOperator display '" . cOperatorList . "'"
syn match cOperator display ';'
hi link cOperator Operator