クイックリンク
YouCompleteMe とは
vim のためのコード補完プラグインです。
YouCompleteMe を使うとEclipse やIDEA のようにリアルタイムにコードの候補を検索して以下の画面のように入力の手助けをしてくれるようになります。
vim のYouComplemeMe でここまでできるようになった。画面上側に説明が出てきてエディタ部分が下がってしまったりと、まだ調整すべきところはあるけど、とりあえず進捗は出せた🤩 pic.twitter.com/50hLj80rzx
— tsutomu (@tsuna0x00) October 20, 2018
YouCompleteMe クイックインストール
YouCompleteMe のGitHub リポジトリを見ると結構ドキュメントがいっぱい…そこで、みなさんがよく使うであろうMac 及び主要なLinux ディストリビューション上で、簡単にYouCompleteMe が使えるように、またあやたが普段使用している.vimrc に簡単に導入できるよう、可能な限り少ない設定内容且つコマンドでインストールできるようまとめてみました。
vim バージョンとコンパイルオプションの確認
$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr 10 2018 21:31:58)
Included patches: 1-1453
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by pkg-vim-maintainers@lists.alioth.debian.org
Huge version with GTK2 GUI. Features included (+) or not (-):
+acl +farsi +mouse_sgr -tag_any_white
......
+comments +libcall -python +vreplace
+conceal +linebreak +python3 +wildignore <- Python 3 サポートあり
+cryptv +lispindent +quickfix +wildmenu
......
python のサポートについてはvim を開いて以下のコマンドを実行して、1 が表示されるかどうかで確認することもできます。
:echo has('python') || has('python3')
Ubuntu 16.04 以降、Fedora 27 以降であれば最新版でインストールされたvim を使うことで条件を満たせます。
それ以外の場合はvim をソースコードからコンパイルする必要があります。
- vim をソースコードからコンパイルする
YouCompleteMe に依存するパッケージ類のインストール
YCM をコンパイルするためにコンパイラ cmake 等の必要なパッケージをインストールします。
$ brew install cmake
※Mac の場合は事前にMacVim もインストールしておいてください。
https://stackoverflow.com/a/21012284
$ sudo apt-get install -y build-essential cmake python3-dev libclang-dev
$ sudo dnf install cmake gcc-c++ make python3-devel
$ sudo pacman -Sy cmake gcc make python3 clang
今回はvim のパッケージマネージャとしてvim-plug を使っていることを想定しています。
vim-plug のインストール
$ curl -fLo "${HOME}/.vim/autoload/plug.vim" --create-dirs "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim"
以下記述を.vimrc に追加します。
call plug#begin('~/.vim/plugged')
Plug 'Valloric/YouCompleteMe'
call plug#end()
let g:ycm_global_ycm_extra_conf = '${HOME}/.ycm_extra_conf.py'
let g:ycm_auto_trigger = 1
let g:ycm_min_num_of_chars_for_completion = 3
let g:ycm_autoclose_preview_window_after_insertion = 1
set splitbelow
上記YouCompleteMe のオプションの簡単な説明は以下のとおりです。
- オプション説明
オプション 説明 g:ycm_global_ycm_extra_conf CやC++ 等のコンパイルに関するオプション等が定義してあるpython スクリプトを指定します g:ycm_auto_trigger YouCompleteMe を自動的に起動するかどうかを設定します。1 を設定すると自動起動するようになります g:ycm_min_num_of_chars_for_completion 識別子補完機能が起動するのに、ユーザが入力していなければならない文字数の最小 g:ycm_autoclose_preview_window_after_insertion 1 に設定すると、vim のインサートモードを抜けた後にプレビューウィンドウを自動的に閉じるようになります。
なお、set splitbelow
については補完機能が起動して関数や変数の説明が表示されるとき、その説明ウィンドウが下に表示されるようにするためのオプションです。
その他のオプションについては公式のGitHub サイトに載っていますので、そちらを参考にしてください。
- YouCompleteMe オプション
.ycm_extra_conf.py ファイルの準備
YouCompleteMe ではC 言語系のソースコードを編集しているときにリアルタイムにコンパイルエラー等を検知してユーザに知らせることができます。
そのC 語系のソースコードをコンパイルするときのルールオプションを指定するファイル.ycm_extra_conf.py
を準備します。
今回はhttps://github.com/Valloric/ycmd
GitHub リポジトリ内のそれを使わせていただくことにします。
$ curl -fLo "${HOME}/.ycm_extra_conf.py" "https://raw.githubusercontent.com/Valloric/ycmd/master/.ycm_extra_conf.py"
準備ができたら、次はYouCompleteMe をインストールします。
今回はパッケージマネージャとしてvim-plug を使う場合を例に進めていきます。その他Vundle やpathogen を使った例は本記事の最後に載せておきますので参考になればと思います。
$ vim +PlugInstall +"sleep 1000m" +qall
$ cd ~/.vim/plugged/YouCompleteMe
$ python3 install.py --clang-completer --system-libclang
以上でインストールは完了です。
試しに簡単なプログラムを書いてvim の補完が効くか確かめてみましょう。
お、MacVim でもYouCompleteMe 動かせた。手順はメモっておこうφ(□□ヘ) pic.twitter.com/rVddPlAAch
— tsutomu (@tsuna0x00) October 27, 2018
YouCompleteMe でvim によるハッピーなプログラミングを加速させましょう!!
おまけ: Vundle を使う場合
vim-plug の場合との違いは主にVundle の仕様による部分がほとんどですので、細かい説明は割愛させていただきます。
備忘録としてインストールコマンドのみを貼り付けておきます。
$ cd "${HOME}"
$ sudo apt-get install -y build-essential cmake python3-dev libclang-dev
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
$ cat << EOF > .vimrc
> set rtp+=~/.vim/bundle/Vundle.vim
> call vundle#begin()
> Plugin 'VundleVim/Vundle.vim'
> Plugin 'Valloric/YouCompleteMe'
> call vundle#end()
> filetype plugin indent on
>
> let g:ycm_global_ycm_extra_conf = '${HOME}/.ycm_extra_conf.py'
> let g:ycm_auto_trigger = 1
> let g:ycm_min_num_of_chars_for_completion = 3
> let g:ycm_autoclose_preview_window_after_insertion = 1
> set splitbelow
> EOF
$ curl -fLo "${HOME}/.ycm_extra_conf.py" "https://raw.githubusercontent.com/ramkalath/config_files/master/nvim/.ycm_extra_conf.py"
$ vim +PluginInstall +"sleep 1000m" +qall
$ cd .vim/bundle/YouCompleteMe/
$ python3 install.py --clang-completer --system-libclang
おまけ: pathogen を使う場合
vim-plug の場合との違いは主にpathogen の仕様による部分がほとんどですので、細かい説明は割愛させていただきます。
備忘録としてインストールコマンドのみを貼り付けておきます。
$ cd "${HOME}"
$ sudo apt-get install -y build-essential cmake python3-dev libclang-dev
$ curl -fLo ./.vim/autoload/pathogen.vim --create-dirs https://tpo.pe/pathogen.vim
$ cat << EOF > .vimrc
> execute pathogen#infect()
>
> let g:ycm_global_ycm_extra_conf = '${HOME}/.ycm_extra_conf.py'
> let g:ycm_auto_trigger = 1
> let g:ycm_min_num_of_chars_for_completion = 3
> let g:ycm_autoclose_preview_window_after_insertion = 1
> set splitbelow
> EOF
$ curl -fLo "${HOME}/.ycm_extra_conf.py" "https://raw.githubusercontent.com/ramkalath/config_files/master/nvim/.ycm_extra_conf.py"
$ git clone https://github.com/Valloric/YouCompleteMe .vim/bundle/YouCompleteMe
$ cd .vim/bundle/YouCompleteMe/
$ git submodule update --init --recursive
$ python3 install.py --clang-completer --system-libclang
参考
-
GitHub Valloric/YouCompleteMe
-
GitHub rdnetto/YCM-Generator
-
script to setup vim, youcompleteme, ultisnips