Подтвердить что ты не робот

Скобки и операторы раскраски в vim для С++?

Я хочу настроить раскраску синтаксиса в vim для С++. Но, к сожалению, я все еще не могу найти правильное имя для фигурных скобок() {} [] и операторов + -/*% для c/С++/objc/objcpp. Любой вим-гуру, который может предложить, какое имя я должен "привет", чтобы установить цвет для упомянутых предметов?

4b9b3361

Ответ 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

Ответ 2

Получите мою развилку круглых скобок радуги (она также работает с операторами): https://github.com/oblitum/rainbow

here's a sample of what you can get

Ответ 3

Во-первых, получите цвета радуги для работы с c, cpp или любым другим. который поясняется на странице загрузки. http://www.vim.org/scripts/script.php?script_id=1230, затем скопируйте плагин в new.vim затем vim new.vim и измените все (и) на {и} соответственно, и сохранить. теперь переделайте его, работая с c,... (независимо от того, что lang), но на этот раз измените имя на new.vim(или как вы его назвали!!), и это сработало для меня.

'[' аналогичны

Ответ 4

@pepper_chico упомянутый плагин радуги. Для этого существует много вилок. Лучшее, что я нашел, это "Улучшенные радужные радуги" . Его активно развивается. И он работает для многих типов файлов, а не только для cpp.

Здесь я расскажу об установке для Vundle, см. ссылку для других способов установки. Линия установки плагина Vundle для этого

Plugin 'luochen1990/rainbow'

Затем для установки передайте следующие команды vim

:so %
:PluginInstall

После этого вы можете добавить это в свой .vimrc для дальнейшей настройки

let g:rainbow_active = 1 "0 if you want to enable it later via :RainbowToggle
let g:rainbow_conf = {
\   'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],
\   'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
\   'operators': '_,\|=\|+\|\*\|-\|\.\|;\||\|&\|?\|:\|<\|>\|%\|/[^/]_',
\   'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'],
\   'separately': {
\       '*': {},
\       'tex': {
\           'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'],
\       },
\       'lisp': {
\           'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],
\       },
\       'vim': {
\           'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/\[/ end=/\]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'],
\       },
\       'html': {
\           'parentheses': ['start=/\v\<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=#</\z1># fold'],
\       },
\       'css': 0,
\   }
\}

Обратите внимание на разницу в поле операторов выше и в конфигурации в ссылке, которую я предоставил. В расширенной конфигурации, указанной в ссылке, выделяется только запятая , Я отредактировал это, чтобы включить больше операторов. Отредактируйте эту линию в соответствии с вашим вкусом, чтобы добавить еще немного. Это результат:

Обратите внимание на изменение цвета из-за вложенности