Вопрос

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

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

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

Picture comparison between Textmate(left) and Vim(right)
(источник: ivzhao.com)

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

Это было полезно?

Решение

Интересно, что маркеры синтаксиса в 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/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 highlight-default" для получения подробной информации).Доступные параметры для команды ":hi" см. в разделе ":справка : выделить".

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

http://pastebin.com/f33aeab77

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

enter image description here

это мой первый пост здесь, и я не знал, как сделать замечание, ответ Эдуардо делает "(" и "{" синтаксис look unmached и bugs 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 но я не пробовал этот вариант.Дайте мне знать, если у вас это сработает.

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

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

Плюсы:

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

Минусы:

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

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

before after

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

syn match    cCustomParen    "(" contains=cParen,cCppParen

Для

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

кажется, это исправляет это для меня.

Используйте плагин для vim, например Список тегов или настроить 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top