注: このプロジェクトはアーカイブされており、不格好でリソースの消費も少ない LSP ベースの強調表示に置き換えられています。 color_coded がこの分野の開拓者であることは間違いありません。それ以来、エディターで色付けされているすべてのトークンに感謝しています。
color_coded は、libclang を使用して C++、C、および Objective C のリアルタイム (高速) タグなしコード ハイライト表示を提供する vim プラグインです。
色分け前 | 色分け後 |
---|---|
OS X に color_coded をインストールする前に、以下をお読みください。 (最新の) OS X に同梱されている vim は、color_coded をサポートできるほど新しいものではありません。さらに、homebrew のデフォルトの macvim では lua が有効になっていません。 OS X に有効な macvim がインストールされていることを確認するには、次の手順を実行してください。
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
など)。これにより、たとえば、ホーム ディレクトリに 1 つを配置し、さらに各プロジェクトのディレクトリに配置することが可能になります。プロジェクト ディレクトリにディレクトリを指定しない場合は、ホーム ディレクトリにあるディレクトリが使用されます。また、異なるファイル タイプ (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
コマンドを呼び出すと、このオプションが変更されて結果が得られます。 ~/.vimrc
で0
として指定して、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 には、入力をやめた後、少し遅れてトリガーされるholdイベントがあることに注意してください。 color_coded もこれにフックし、可能であればそれを使用して強調表示を適用します。
うん。信じられないかもしれませんが、これらはほぼ確実に libclang のバグです。私はそれらのいくつかを整理し、libclang の独自のフォークを保守しています。このような問題を報告したい場合は、このチケットを確認してください。
これは意図的なものです。初めてバッファを開いたとき、color_coded は適切にコンパイルされるかどうかわかりません。また、それを理解しようとしている間、ユーザーを待たせたくありません。 color_coded は常にバックグラウンドでコンパイルされ、カーソルの移動やテキストの変更などのイベントが更新をポーリングします。ただし、バッファに強調表示が設定されると、そのバッファを離れてバッファに戻ると、前の強調表示が同期して適用されることに注意してください。
color_coded をインストールする場合、正常に使用する前に手動でコンパイルする必要があります。手順については、「インストール」を参照してください。
color_coded の動作するインストールを更新したと仮定すると、更新により color_coded の再コンパイルが必要になると (つまり、ネイティブ API に変更があった場合)、このエラーが発生します。再コンパイルするには、最初にコンパイルしたときとまったく同じ手順に従います。
少なくとも今のところ、color_coded は neovim をサポートしていません。ただし、特に neovim に対して同様のハイライト表示を提供することを目的とした chromatica.vim があります。
これは、追加のインクルード パスを必要とする特定のオペレーティング システムで発生します。解決策は、これらのパスが.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
cmake
には、 DOWNLOAD_CLANG=0
を指定できます。プラットフォームによっては、 LLVM_CONFIG=
使用して llvm-config バイナリへのパスを指定する必要がある場合もあります。これにより、異なるバージョンの Clang/LLVM を使用できるようになります。
例:
cmake . -DDOWNLOAD_CLANG=0
Debian ベースのシステムではこの問題が発生する可能性があります。解決策はliblua-5.x-0-dbg
インストールすることでした。
これは vim のバグが原因で発生します。少なくともパッチ 1691 が適用された vim を使用することでこの問題を回避できます。詳細については、この問題を参照してください。
お気軽に Github で問題を提起するか、私に電子メールを送信するか、IRC で連絡してください: Freenode @ #color_coded
color_coded は MIT オープンソース ライセンスの下にあります。
LICENSE
ファイルまたは http://opensource.org/licenses/MIT を参照してください。