Класс и имена функций в Vim
Я только недавно настроил свою среду Vim из Textmate, после того как стал зависимым от его модального ввода.
Однако подсветка синтаксиса в Vim выглядит не очень красиво. Я кодирую в C++, и так как вызов функции и имена классов не могут быть выделены, код труднее читать. Я немного поиграл с цветовой схемой, но не смог найти ни одного поля, соответствующего "имени класса" или "имени функции".
На изображении ниже обратите внимание, что DroughtLayer::
и *.size()
не выделены справа в MacVim.
(источник: ivzhao.com)
Есть идеи как решить это? Это действительно раздражает меня, так как я очень чувствительный парень.
Ответы
Ответ 1
Интересно, что синтаксические выделения в VIM не поддерживают применение синтаксиса к идентификаторам или именам функций - по крайней мере, не синтаксические выделения для C и С++. Итак, даже если вы это сделаете:
:hi Function guifg=red
или
:hi Identifier guifg=red
он не дает цвета. Мне кажется, что это не что иное, как ключевые слова и константы для этих языков.
Здесь кто-то начал расширять синтаксический файл cpp для поддержки имен методов. Наверное, это начало.
http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition
Ответ 2
У меня была такая же проблема, когда я начал использовать 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/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
Это! Теперь имена функций и классов будут выделены цветом, определенным в выделении "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
И обязательный скриншот:
![enter image description here]()
Ответ 3
Это мой первый пост здесь, и я не знал, как сделать наблюдение, ответ Эдуардо делает "(" и "{" выглядят неуправляемыми и синтаксически синтаксически, я немного изменил это, чтобы исправить это.
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
Ответ 4
Единственное решение - использовать встроенную базу данных ctags. Поэтому создайте его с помощью утилиты ctags. Затем установите переменную "теги" и поместите следующее в
~/.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, но я не пробовал это. Дайте мне знать, если это сработает для вас.
Ответ 5
РЕДАКТИРОВАТЬ: color_coded может быть слишком тяжелым для вас. попробуйте octol/vim-cpp-extended-highlight. Он поддерживает C++ 11/14 и интегрирует то, что отвечает @Eduardo. ![]()
Подсветка на основе семантики:
Я бы порекомендовал jeaye/color_coded, плагин vim для подсветки на основе libclang
Извините, что я новичок в stackoverflow, что означает, что у меня недостаточно репутации для публикации изображений. Пойди посмотри на его эффекты, если хочешь попробовать. :)
Плюсы:
- Простая установка
- Семантическая подсветка
- Clighter, упомянутый выше, нужен vim, скомпилированный с
python2.7
. Однако color_coded написано в C++ и обеспечивает привязку lua → C++.
Минусы:
- Это откладывается, если вы не сделаете несколько vim-событий, чтобы активировать его.
- Настройка немного сложнее; вам нужно отредактировать синтаксис /color_coded.vim самостоятельно. Но настройка была размещена на его дорожной карте.
Хотя он все еще находится в стадии разработки, он все больше привлекает внимание.
![before]()
![after]()
Ответ 6
Сергей, изменив первую строку из
syn match cCustomParen "(" contains=cParen,cCppParen
к
syn match cCustomParen "(" contains=cParen contains=cCppParen
похоже, исправляет это для меня.
Ответ 7
Используйте плагин для vim, например Taglist или настройте интеграцию ctags
или cscope
с vim (здесь учебник для vim/cscope.)
Ответ 8
Попробуйте использовать этот плагин http://www.vim.org/scripts/script.php?script_id=2646
Его делает все ctags, которые очень эффективно выделяют вам
Ответ 9
Я действительно рекомендую вам плагин taghighlight
, нажмите здесь для этого веб-сайта.
Ответ 10
Также можно рассмотреть плагин Clighter
, который является
plugin for c-family semantic source code highlighting, based on Clang
Однако для этого требуются довольно свежие версии и программное обеспечение: vim 7.4.330 +python2
и libclang
.