YouCompleteMe という Vim エディタ用の補完プラグインがある.
これを利用させてもらい, Python と C++ の補完をしようと思っていろいろ試行錯誤をしていた. 疲れた. そんな疲れた体に鞭を打って忘れないうちにメモをとっておこうと思う. ちなみにメモを取る理由は, このプラグインの情報のほとんどが英語だったので, 自分用でもいいから日本語のメモをとっておきたいからである*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 を使って動くもののようだ. 正直詳細はよくわかっていない.
~/.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>
すれば補完リスト出てくるなど. 詳細はやっぱり公式ドキュメントを見てね.
まとめ
英語だからまだましとはいえ, 疲れる.