выделение имен классов и функций в Vim

недавно я настроил свою среду Vim из Textmate, после того, как стал зависимым от ее модального ввода.

однако подсветка синтаксиса кажется не такой красивой в Vim. I код на C++, и поскольку вызов функции и имена классов не могут быть выделены, код сложнее читать. Я немного поиграл с цветовой схемой, но не смог найти поля, соответствующего "имени класса" или "имени функции".

На фото ниже, обратите внимание, как DroughtLayer:: и *.size() не выделяется справа в MacVim.

сравнительная картина между текст. сообщ(слева) и vim(справа) http://ivzhao.com/temp/vimHL.png

есть идеи, как это решить? Это действительно раздражает меня, так как я очень чувствительный к зрению парень.

10 ответов


интересно, что синтаксические маркеры в VIM не поддерживают применение синтаксиса к идентификаторам или именам функций - по крайней мере, не синтаксические маркеры для C и c++. Так что, даже если вы делаете:

:hi Function guifg=red

или

:hi Identifier guifg=red

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

здесь кто-то начал расширять файл синтаксиса cpp для поддержки имен методов. Это начало. догадка. http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition


у меня была такая же проблема, когда я начал использовать vim. Решение простое, вам просто нужно отредактировать файл синтаксиса c, используемый vim, вот как это сделать:

когда вы начинаете редактировать файл C или c++, vim считывает файл синтаксиса c по умолчанию, расположенный в

$VIMRUNTIME/syntax/c.vim

(где $VIMRUNTIME-это место, где установлен vim. Вы можете узнать его значение по умолчанию, открыв vim и используя команду": echo $VIMRUNTIME").

вы можете просто перезаписать этот файл, или вы можете создать свой пользовательский файл синтаксиса C (который будет загружен vim вместо стандартного) в этом месте:

$HOME/.vim/syntax/c.vim      (for UNIX)
$HOME/vimfiles/syntax/c.vim  (for PC or OS/2)

(Я никогда не использовал Mac, поэтому я не знаю, какой из них будет работать для вас. Вы можете узнать больше в справке vim,": help vimfiles")

теперь самое интересное. Скопируйте значение по умолчанию "$VIMRUNTIME / syntax / c.vim " файл в каталог vimfiles ("$HOME/.vim / синтаксис / c.vim " для UNIX) и отредактируйте его, добавив эти строки:

" Highlight Class and Function names
syn match    cCustomParen    "(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope

hi def link cCustomFunc  Function
hi def link cCustomClass Function

вот именно! Теперь функции и имена классов будут выделены цветом, определенным в выделении "функция" (": hi Function"). Если вы хотите настроить цвета, вы можете изменить последние две строчки выше что-то вроде этого:

hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def cCustomClass gui=reverse guifg=#00FF00

или вы можете оставить файл синтаксиса C в покое и определить цвета в файле vimrc ( ": help vimrc"):

hi cCustomFunc  gui=bold guifg=yellowgreen
hi cCustomClass gui=reverse guifg=#00FF00

(обратите внимание на отсутствие ключевого слова" def", перейдите к": help highlight-default " для деталей). Доступные параметры команды": hi "см. В разделе": help: highlight".

вы можете найти полный c.Vim-файл для Vim 7.2 по этой ссылке (Примечание: используйте это, только если у вас есть не измененный Vim, версия 7.2):

http://pastebin.com/f33aeab77

и обязательный скриншот:

http://img16.imageshack.us/img16/2073/vimy.png (извините за на ImageShack)


Это мой первый пост здесь, и я не знал, как сделать замечание, ответ Эдуардо делает "(" и "{" выглядят несвязанными и ошибки синтаксиса foldind, я немного изменил его, чтобы исправить это.

syn match    cCustomParen    "?=(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(\@=" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope
hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def link cCustomClass Function

единственное решение-это использовать ctags базе. Поэтому создайте один с ctags утилиты. Затем установите переменную' tags ' и поместите следующее в

~/.vim/after/syntax/c.vim

function! s:highlight()
    let list = taglist('.*')

    for item in list
        let kind = item.kind

        if kind == 'f' || kind == 'c'
            let name = item.name
            exec 'syntax keyword Identifier '.name
        endif
    endfor
endfunction

call s:highlight()

Я должен предупредить вас, что это может работать очень медленно на очень большой базе данных ctags.

есть решение на vim.org но эту я не пробовал. Дай мне знать, если это сработает.


EDIT: color_coded может быть слишком тяжелым для вас. попробуй!--2-- > octol / vim-cpp-enhanced-highlight. Он поддерживает C++11/14 и интегрирует ответы @Eduardo.

семантический маркера на основании:
Я бы рекомендовал jeaye / color_coded, Плагин vim для подсветки на основе libclang
Так жаль, что я новичок в stackoverflow, что означает, что у меня недостаточно репутации для публикации изображений. Иди посмотри на его эффекты, если хочешь попробовать. :)

плюсы:

  • легкая установка
  • смыслового выделения
  • Clighter, упомянутый выше, нужен vim, скомпилированный с python2.7. Однако color_coded написан на C++ и обеспечивает привязку lua - > С.++

плюсы:

  • он задерживает, если вы не сделаете некоторые события vim, чтобы acitve его.
  • настройка немного сложнее; вам нужно отредактировать синтаксис / color_coded.напор себе. Но настройки по "дорожной карте".

хотя он все еще находится в стадии разработки, он все больше привлекает внимание.

beforeafter


Сергей, меняем первую строчку с

syn match    cCustomParen    "(" contains=cParen,cCppParen

to

syn match    cCustomParen    "(" contains=cParen contains=cCppParen

Кажется, чтобы исправить это для меня.


используйте плагин для vim, как Taglist или настройка ctags или cscope интеграция с vim (здесь учебник для vim / cscope.)


попробуйте использовать этот плагин http://www.vim.org/scripts/script.php?script_id=2646 Ее все ctags подсветка очень эффективно для вас


Я действительно рекомендую вам taghighlight плагин, нажмите кнопку здесь для его веб-сайта.


на Clighter плагин также можно считать, что это

plugin for c-family semantic source code highlighting, based on Clang

однако требуется довольно последние версии и программное обеспечение:vim 7.4.330 +python2 и libclang.