ПРИМЕЧАНИЕ. Этот проект заархивирован и заменен подсветкой на основе LSP, которая менее громоздка и требует меньше ресурсов. color_coded, без сомнения, был пионером в этой области, и я благодарен за все токены, которые с тех пор раскрашиваются в наших редакторах.
color_coded — это плагин vim, который обеспечивает (быструю) подсветку кода без тегов в реальном времени для C++, C и Objective C с помощью libclang.
До color_coded | После color_coded |
---|---|
Перед установкой color_coded в OS X прочтите следующее. Vim, поставляемый с OS X (даже самой последней), недостаточно нов, чтобы поддерживать color_coded. Кроме того, в macvim по умолчанию из homebrew не включен Lua. Чтобы убедиться, что у вас установлена действительная установка Macvim в OS X, выполните следующие действия:
brew update
brew install macvim --with-lua --with-override-system-vim
brew linkapps macvim
brew install xz cmake
# Spawn a new shell to use the new system vim
Чтобы получить правильную подсветку, вам также понадобятся инструменты командной строки Xcode, которые предоставят вам соответствующие системные заголовки:
xcode-select --install
Сначала установите все необходимые зависимости.
[sudo] apt-get install build-essential libclang-3.9-dev libncurses-dev libz-dev cmake xz-utils libpthread-workqueue-dev libtinfo-5
Для lua вы должны установить версию, для которой скомпилирована ваша версия vim.
vim --version | grep lua
Найдите номер своей версии -llua5.x
и используйте его для установки правильной версии.
[sudo] apt-get install liblua5.x-dev lua5.x
Вам также необходимо убедиться, что у вас установлена версия GCC 4.9 (или выше). Если нет, вы можете попробовать следующее (проверено на Ubuntu 14.04).
# Install GCC 4.9
[sudo] add-apt-repository ppa:ubuntu-toolchain-r/test
[sudo] apt-get update
[sudo] apt-get install g++-4.9
# Prefer 4.9 to other versions
[sudo] update-alternatives --remove-all g++
[sudo] update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 50
(Протестировано во FreeBSD 11.1)
$ [sudo] pkg install llvm40 cmake
$ cd ~ /.vim/bundle/color_coded
$ mkdir build && cd build
$ cmake -DCUSTOM_CLANG=1 -DLLVM_ROOT_DIR=/usr/local/llvm40 ..
$ make && make install
Установка была протестирована с использованием vundle, но также должна быть совместима с патогеном. Чтобы установить с помощью vundle (добавьте строку в ~/.vimrc
, перезапустите vim, запустите :PluginInstall
):
Plugin ' jeaye/color_coded '
Установка с помощью NeoBundle поддерживает автоматическую сборку и отложенную загрузку плагина:
NeoBundleLazy ' jeaye/color_coded ' , {
' build ' : {
' unix ' : ' rm -f CMakeCache.txt && cmake . && make && make install ' ,
},
' autoload ' : { ' filetypes ' : [ ' c ' , ' cpp ' , ' objc ' , ' objcpp ' ] },
' build_commands ' : [ ' cmake ' , ' make ' ]
}
Поскольку у color_coded есть скомпилированный компонент, вам придется вручную компилировать его при установке и обновлении (если только ваш менеджер пакетов vim не сделает это за вас). Компиляция работает следующим образом, предполагая использование vundle (см. раздел «Зависимости», чтобы убедиться, что вы можете make
правильно):
cd ~ /.vim/bundle/color_coded
rm -f CMakeCache.txt
mkdir build && cd build
cmake ..
make && make install # Compiling with GCC is preferred, ironically
# Clang works on OS X, but has mixed success on Linux and the BSDs
# Cleanup afterward; frees several hundred megabytes
make clean && make clean_clang
По различным причинам совместимости color_coded попытается загрузить известную версию clang. Это может увеличить время процесса настройки, но обеспечивает большую стабильность на нескольких платформах. Как избежать этого официально не поддерживается, но описано здесь.
ДРУГОЕ ПРИМЕЧАНИЕ: color_coded не обеспечивает надежной поддержки luajit. Более информативно: luajit не поддерживает встраивание в общие библиотеки.
После установки и компиляции color_coded он автоматически начнет работать при следующем запуске vim. Чтобы color_coded знал, как должен компилироваться ваш код, вам может потребоваться создать файл, описывающий необходимые параметры компилятора. Обратите внимание, что color_coded предполагает разумные значения по умолчанию и пытается разрешить немедленное использование.
Тем не менее, в любом нетривиальном случае вам понадобится предоставить файл .color_coded
для вашего проекта. Для каждого файла color_coded будет выполнять поиск от каталога файла до корня файловой системы в поисках файла .color_coded
или файла .color_coded_foo
(где foo
— это тип файла; т. е. c
, cpp
и т. д.). Это позволяет вам иметь один файл, например, в вашем домашнем каталоге, а затем в каждом каталоге ваших проектов. Если вы не укажете его в каталоге проекта, будет использоваться тот, который находится в вашем домашнем каталоге. Это также позволяет предоставлять разные флаги для разных типов файлов (C, C++ и т. д.), а также работать в подпроектах с разными флагами. Опять же, если такие файлы не найдены, будут применены разумные значения по умолчанию.
color_coded сделает все возможное, чтобы выделить ваш код, даже если в единице перевода есть ошибки. Это позволяет лучше выделять при вводе и выделять действительный код, когда color_coded не знает всего о вашем проекте.
Содержимое файла .color_coded
или .color_coded_foo
представляет собой просто список параметров компилятора, разделенных строками. Например, файл .color_coded
для color_coded (color_coded помещает остальное по умолчанию при обнаружении файлов C или C++):
-Iinclude
-Ilib/jest/include
Файл .color_coded
может быть автоматически создан с помощью YCM-Generator.
ПРИМЕЧАНИЕ. Для простоты в файле .color_coded
не разрешены никакие другие данные. То есть комментарии не поддерживаются.
g:color_coded_enabled
Эта опция определяет, будет ли работать color_coded. Вызов команды :CCtoggle
изменит эту опцию для достижения желаемых результатов. Вы также можете указать значение 0
в вашем ~/.vimrc
, чтобы глобально отключить color_coded.
По умолчанию:
let g: color_coded_enabled = 1
g:color_coded_filetypes
Эта опция управляет типами файлов, которые color_coded попытается скомпилировать.
По умолчанию:
let g: color_coded_filetypes = [ ' c ' , ' cpp ' , ' objc ' ]
Color_coded добавляет много новых групп выделения. Они разработаны так, чтобы максимально точно следовать внутреннему устройству libclang. Чтобы связать вещи воедино, были созданы несколько групп-оболочек, которые позволят внести более масштабные изменения. Группы clang по умолчанию отображаются для их использования вместе с обычными группами vim ( Function
, Macro
, Number
и т. д.).
" To get full highlighting, specify these in your colorscheme.
" See colors/twilighted.vim for example usage
hi Member " Any non-static member variable
hi Variable " Any non-member variable
hi Namespace
hi EnumConstant
hi link StructDecl Type
hi link UnionDecl Type
hi link ClassDecl Type
hi link EnumDecl Type
color_coded поставляется с образцом цветовой схемы, демонстрирующей поддержку расширенных групп. Чтобы использовать его, вызовите :colorscheme twilighted
. Как следует из названия, цветовая схема является ответвлением собственной сумеречной темы vim и соответствующим образом преобразована в ту, которую вы увидите в репозитории. Чтобы изучить реализацию, посетите colors/twilighted.vim
. Обратите внимание, что color_coded может работать с любой цветовой схемой; это всего лишь образец.
Дополнительную информацию обо всех поддерживаемых группах см. after/syntax/color_coded.vim
и документации clang.
:CCerror
Эта команда выводит последнее сообщение об ошибке компиляции из libclang. Если подсветка не работает должным образом, возможно, у вас неправильно настроен файл .color_coded
или в исходном коде могут быть синтаксические ошибки. Если сомневаетесь, сначала проверьте здесь.
:CCtoggle
Эта команда включает color_coded, если он в данный момент отключен, или отключает его, если он в данный момент включен. Это включение/отключение осуществляется с помощью опции g:color_coded_enabled
.
Для компиляции color_coded требуется:
Для использования color_coded требуется vim:
color_coded пытается скомпилировать ваш код по мере его ввода. Из-за того, как работает vim, color_coded может обновлять выделение только после того, как вы что-то делаете (перемещаете курсор, вносите изменения и т. д.). Когда вы закончите печатать, а подсветка не завершила обновление, предполагая, что вашего файла .color_coded
достаточно, перемещение курсора (или вызов событий каким-либо другим способом) позволит color_coded завершиться.
Обратите внимание: в vim есть событие удержания, которое срабатывает после того, как вы прекращаете печатать, и после некоторой задержки. color_coded также учитывает это и будет использовать его для выделения, если это возможно.
Ага. Хотите верьте, хотите нет, но это почти наверняка ошибки libclang. Я разобрался с некоторыми из них и поддерживаю свою собственную версию libclang. Если вы хотите сообщить о такой проблеме, ознакомьтесь с этим билетом.
Это намеренно. Когда вы впервые открываете буфер, color_coded не знает, будет ли он правильно компилироваться, и не хочет, чтобы вы ждали, пока он попытается это выяснить. color_coded всегда будет компилироваться в фоновом режиме, а такие события, как перемещение курсора или изменение текста, будут опрашивать обновления. Однако обратите внимание: как только буфер имеет подсветку, выход из этого буфера и возврат к нему синхронно применит предыдущую подсветку.
Когда вы устанавливаете color_coded, вам необходимо вручную скомпилировать его, прежде чем вы сможете его успешно использовать. Инструкции см. в разделе «Установка».
Предполагая, что вы обновили рабочую установку color_coded, вы получите эту ошибку, если обновление потребует перекомпиляции color_coded (т. е. в собственном API были внесены изменения). Чтобы перекомпилировать, выполните те же действия, которые вы предприняли при первоначальной компиляции.
По крайней мере, на данный момент color_coded не поддерживает neovim. Однако существует chromatica.vim, целью которого является обеспечение аналогичного выделения, специально для neovim.
Это происходит в некоторых операционных системах, которые требуют дополнительных путей включения; решение состоит в том, чтобы просто убедиться, что эти пути находятся в вашем файле .color_coded
с префиксом -isystem
. Чтобы узнать эти пути, выполните следующее:
echo | clang -v -E -x c++ -
Подробности смотрите в этом комментарии к проблеме. color_coded пытается помочь, предполагая некоторые из них, как показано здесь в post_constants()
.
Вероятно, вы используете luajit, который плохо встраивается в общие библиотеки. Если вы не уверены, посмотрите, получится ли что-нибудь:
vim --version | grep jit
Дополнительная информация здесь.
Вы можете использовать это в своем .vimrc
:
" Disable color_coded in diff mode
if & diff
let g: color_coded_enabled = 0
endif
Вы можете указать DOWNLOAD_CLANG=0
для cmake
. В зависимости от вашей платформы вам также может потребоваться указать путь к двоичному файлу llvm-config с помощью LLVM_CONFIG=
. Это также позволит вам использовать разные версии Clang/LLVM.
Пример:
cmake . -DDOWNLOAD_CLANG=0
Вы можете столкнуться с этим в системах на базе Debian. Решением было установить liblua-5.x-0-dbg
.
Это вызвано ошибкой в vim; вы можете обойти эту проблему, используя vim как минимум с патчем 1691. Подробности см. в этой проблеме.
Не стесняйтесь задавать вопросы на Github, пишите мне по электронной почте или ловите меня в IRC: Freenode @ #color_coded
color_coded находится под лицензией с открытым исходным кодом MIT.
См. файл LICENSE
или http://opensource.org/licenses/MIT.