выделение имен классов и функций в Vim
Я только недавно настроил свою среду Vim из Textmate, после того, как стал зависимым от ее модального ввода.
однако подсветка синтаксиса, кажется, не так красива в Vim. Я кодирую на C++, и поскольку имена вызовов функций и классов не могут быть выделены, код сложнее читать. Я немного поиграл с цветовой схемой, но не смог найти ни одного поля, которое соответствовало бы "имени класса" или "имени функции".
На фото ниже, обратите внимание, как DroughtLayer::
и *.size()
не выделяется справа в MacVim.
сравнение изображений между Textmate (слева) и Vim(справа) http://ivzhao.com/temp/vimHL.png
есть идеи, как это решить? Это действительно раздражает меня, так как я очень чувствительный к зрению парень.
10 ответов:
: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/синтаксис/С. ВИМ" файл в каталог vimfiles ("$дома/.vim / syntax/ 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 Выделите-по умолчанию " для деталей). Доступные параметры для команды": hi "см. В разделе": help :highlight".
вы можете найти полный файл c. vim для Vim 7.2 по этой ссылке (Примечание: используйте это только если у вас есть немодифицированный Vim, версия 7.2):
и обязательный скриншот:
http://img16.imageshack.us/img16/2073/vimy.png (извините за imageshack)
Это мой первый пост здесь, и я не знал, как сделать наблюдение, ответ Эдуардо делает "(" и "{" look unmached and bugs syntax 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 может быть слишком тяжелым для вас. попробуй octol/vim-cpp-enhanced-highlight. Он поддерживает C++11/14 и интегрирует то, что @Eduardo отвечает.
семантический маркера на основании:
Я бы рекомендовал jeaye / color_coded, Плагин vim для подсветки на основе libclang
Так жаль, что я новичок в stackoverflow, что означает, что у меня недостаточно репутации для публикации изображений. Посмотрите на его эффекты, если вы хотите дать ему шанс. :)плюсы:
- легкая установка
- смыслового выделения
- Clighter упомянутые выше, необходимо ВИМ составлен с
python2.7
. Однако color_coded написан на C++ и обеспечивает привязку lua - > С.++плюсы:
- он задерживается, если вы не сделаете некоторые события vim для его активации.
- настройка немного сложнее; вам нужно отредактировать синтаксис / color_coded.напор себе. Но настройка была размещена на его дорожной карте.
хотя он все еще находится в стадии разработки, он все больше привлекает внимание.
Сергей, меняем первую строчку с
syn match cCustomParen "(" contains=cParen,cCppParen
до
syn match cCustomParen "(" contains=cParen contains=cCppParen
Кажется, чтобы исправить это для меня.
попробуйте использовать этот плагин http://www.vim.org/scripts/script.php?script_id=2646 Ее все ctags подсветка очень эффективно для вас
Я действительно рекомендую вам
taghighlight
плагин, нажмите кнопку здесь на это сайте.
The
Clighter
плагин также может быть рассмотрен, что являетсяplugin for c-family semantic source code highlighting, based on Clang
однако, требуется довольно последние версии и программное обеспечение:
vim 7.4.330 +python2
иlibclang
.