2009-09-18 2 views

ответ

4

Синтаксис C/C++ определяется в синтаксисе/c.vim и синтаксисе/cpp.vim. Если вы используете Linux, основной каталог синтаксиса находится в/usr/share/vimXX /, где XX - версия (например, мои находятся в vim72). Я не знаю об установочных каталогах на других ОС, но я уверен, что вы можете его найти. Я бы предложил сделать их копию и поместить в ваш пользовательский каталог vim (например, в Linux, $ HOME/.vim/syntax/c.vim и т. Д.). Затем вы можете добавить все, что захотите.

Синтаксис C++ содержит синтаксис C, поэтому любые символы, которые вы хотите выделить в обоих, должны идти в c.vim, и все, что нужно для C++, должно быть только в cpp.vim.

Чтобы получить подсветку синтаксиса для конкретных символов, вам нужно использовать оператор матча синтаксис, что-то вроде:

syn match cUserSpecialCharacter display "[~!%^&*()-+=[\]{},.<>?:;]" 
syn match cUserSpecialCharacter display "/[^*/]"me=e-1 
syn match cUserSpecialCharacter display "/$" 

Я назвал его cUserSpecialCharacter так cCharacter и cSpecialCharacter уже используется. Второе и третье совпадения - это бит kludge, который выделяет '/' без соответствующих префиксов комментариев, которые затем перекрывают выделение комментария и прерывают все. Опция «display» указывает Vim, что нет необходимости искать этот матч, если он не будет отображаться - см. :help syn-display для объяснения, если хотите!

После того, как вы определили соответствие синтаксиса, вы можете связать его с кульминационной группы, например:

hi def link cUserSpecialCharacter cCharacter 

Это поставит его с уже определены cCharacter группу, поэтому он будет получать все, выделяя, что получает - в этом случае, Character. Вы можете увидеть хороший список групп подсветки внизу c.vim для примеров. Если вы действительно хотите, вы можете также жёстко изюминки, делая что-то вроде: (. Произвольному примера - мое текущего подсвечивания для Error группы)

hi cUserSpecialCharacter term=reverse ctermfg=15 ctermbg=1 guifg=#ffffff guibg=#800000 

См :help hi для получения дополнительной информации по этому вопросу, или просто :hi, чтобы увидеть список определенных выделов - множество примеров. Я бы рекомендовал не делать этого, поскольку он не будет меняться с помощью цветовых схем.

+0

Спасибо, Jefromi за ваш тщательный ответ. Я сделал тест, и он отлично работает. Есть только незначительная проблема; Символ «-» не выделяется. – Tassos

+0

Мое лучшее предположение заключается в том, что это часть другого определения синтаксиса, которое имеет приоритет. Синтаксические определения C довольно сложны, поэтому, к сожалению, я не знаю достаточно, чтобы указать, где это может быть. Вы можете выполнить поиск типа "/ syn * \ (match \ | region \) [^"] * "[^"] * - "искать вещи, содержащие" - ", и посмотреть, не найдете ли что-нибудь? – Cascabel

0

Да, вам нужно отредактировать C цветовую тему в vimfiles/цвета/c.vim Я не знаю, все варианты тему можно использовать, но я уверен, что они зарегистрированы на http://vim.org/

+0

Хотя я все для всех читаю документацию, просто указывая на то, что это не большой ответ ... и вы ошиблись. Это подсветка синтаксиса, а не цветовая схема, поэтому она имеет синтаксис /, а не цвет /. Кроме того, vimfiles - это каталог add-on/override, используемый для всех версий Vim; встроенные скрипты находятся в каталоге vimXX. – Cascabel

+0

Цветовая схема загружается синтаксисом, определяющим, что это такое, цветовая схема определяет, какой цвет использовать, таким образом, большинство раз в то время, когда совпадает с номером цвета, выделяющим тип синтаксиса. – ewanm89

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