Diary over Finite Fields

515ひかるが書き溜めたメモとコラムと雑記

YouCompleteMe の設定で疲れた

YouCompleteMe という Vim エディタ用の補完プラグインがある.

github.com

これを利用させてもらい, PythonC++ の補完をしようと思っていろいろ試行錯誤をしていた. 疲れた. そんな疲れた体に鞭を打って忘れないうちにメモをとっておこうと思う. ちなみにメモを取る理由は, このプラグインの情報のほとんどが英語だったので, 自分用でもいいから日本語のメモをとっておきたいからである*1. 質がいいとは限らない.

YouCompleteMe のインストール

Arch Linux の非公式(AUR) からもインストールできるのだが, 私は Vimプラグインは NeoBundle で管理している. しかし, NeoBundle のビルドではなんかうまくいかなかったので, ファイルのダウンロードは NeoBundle にやってもらうことにして, ビルドは手動で行うことにした. 逆に変なトラブルが起きそうな気もするので, NeoBundle せず素直に git clone でダウンロードしたほうがいいかもしれないと今思った.

NeoBundle するなら,

  " YouCompleteMe
    NeoBundle "Valloric/YouCompleteMe"

試していないが, 手動でダウンロードするならこうすべきだろう.

  % cd ~/.vim/bundle/ && git clone https://github.com/Valloric/YouCompleteMe.git

OS によってここからの操作は結構異なるので, 詳細は公式ドキュメントを見ていただきたい.

ダウンロードを終えたら, まずはドキュメント通りに次のコマンドを走らせる.

 % cd ~/.vim/bundle/YouCompleteMe/ 
 % git submodule update --init --recursive

少し時間がかかる. 終了した後, 中にある install.py を起動するのだが, 次の点に注意.

  • Python2 じゃないとダメ
  • コンパイラは Clang を使わないとダメ

もし Clang を持っていなければインストール. 何をインストールするのかはこれまた OS により違うので公式ドキュメントを参照.

デフォルトの python が 3.5 だった私は次のようにしてインストールスクリプトを起動した.

 % python2 ./install.py --clang-completer --system-libclang

しばらく待つとインストールが完了する.

C++ の補完ファイルの設定

とりあえず初期設定のままで補完するならこれでO.K.

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

しかしたとえばこのままだと, ローカルのヘッダーファイルなどは読み込んでいないので不便*2. そこで, ローカルのヘッダーファイルがあるディレクトリを追加する.

% less ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py すると,

前略
flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wc++98-compat',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
...

というのがあるが, この flag に適切なディレクトリの指定を追加すれば良い.

実際にはこのファイルを直接編集, 相対パスで記述されているものもあって, 迂闊に動かしたりするとかえって面倒なのでとりあえず放置している. どうせ一行しか追加していない*3.

Python の補完

Python の補完にはまた違うプラグインを入れる必要がある. YouCompleteMe を使って動くもののようだ. 正直詳細はよくわかっていない.

github.com

~/.vimrc に次を記述し, :NeoBundleInstall.

 NeoBundle 'davidhalter/jedi-vim'

こちらも次のようにコマンドを走らせることが必要.

 % cd ~/.vim/bundle/jedi-vim && git submodule update --init

あと, このプラグインpython ファイルを書くときのみ起動すればいいのと, 僕は特に Python2 にこだわる理由はないので補完も Python3 で行いたい. 次を .vimrc に記述

let g:jedi#force_py_version = 3
autocmd FileType python setlocal completeopt-=preview

これで設定終了.

メソッドの補完は何も考えないで出てくるし, <C-Space> すれば補完リスト出てくるなど. 詳細はやっぱり公式ドキュメントを見てね.

まとめ

英語だからまだましとはいえ, 疲れる.

*1:本筋ではないので書かないが, 私は neo-complete を使っていたことがあるので, 比較的日本語ドキュメントが豊富なプラグインの存在を知らないわけではないと言っておく.

*2:僕の場合 iostream が補完候補に現れなくて長旅が始まったのだった.

*3:このファイルをどう編集すればいいのかで無駄に時間を費やしたわけであった.