Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What is going on with this article?
@TsutomuNakamura

vim のコード補完プラグインYouCompleteMe クイックインストールガイド

More than 1 year has passed since last update.

クイックリンク

YouCompleteMe とは

vim のためのコード補完プラグインです。
YouCompleteMe を使うとEclipse やIDEA のようにリアルタイムにコードの候補を検索して以下の画面のように入力の手助けをしてくれるようになります。


YouCompleteMe クイックインストール

YouCompleteMe のGitHub リポジトリを見ると結構ドキュメントがいっぱい…そこで、みなさんがよく使うであろうMac 及び主要なLinux ディストリビューション上で、簡単にYouCompleteMe が使えるように、またあやたが普段使用している.vimrc に簡単に導入できるよう、可能な限り少ない設定内容且つコマンドでインストールできるようまとめてみました。

vim バージョンとコンパイルオプションの確認

vimversion確認
$ 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 が表示されるかどうかで確認することもできます。

vimを開いて確認する方法
:echo has('python') || has('python3')

Ubuntu 16.04 以降、Fedora 27 以降であれば最新版でインストールされたvim を使うことで条件を満たせます。
それ以外の場合はvim をソースコードからコンパイルする必要があります。

YouCompleteMe に依存するパッケージ類のインストール

YCM をコンパイルするためにコンパイラ cmake 等の必要なパッケージをインストールします。

Mac
$ brew install cmake

※Mac の場合は事前にMacVim もインストールしておいてください。
https://stackoverflow.com/a/21012284

Ubuntu18.04
$ sudo apt-get install -y build-essential cmake python3-dev libclang-dev
Fedora28
$ sudo dnf install cmake gcc-c++ make python3-devel
Arch
$ 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 に追加します。

~/.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 サイトに載っていますので、そちらを参考にしてください。

.ycm_extra_conf.py ファイルの準備

YouCompleteMe ではC 言語系のソースコードを編集しているときにリアルタイムにコンパイルエラー等を検知してユーザに知らせることができます。
そのC 語系のソースコードをコンパイルするときのルールオプションを指定するファイル.ycm_extra_conf.py を準備します。

今回はhttps://github.com/Valloric/ycmd GitHub リポジトリ内のそれを使わせていただくことにします。

.ycm_extra_conf.pyの準備
$ curl -fLo "${HOME}/.ycm_extra_conf.py" "https://raw.githubusercontent.com/Valloric/ycmd/master/.ycm_extra_conf.py"

準備ができたら、次はYouCompleteMe をインストールします。
今回はパッケージマネージャとしてvim-plug を使う場合を例に進めていきます。その他Vundle やpathogen を使った例は本記事の最後に載せておきますので参考になればと思います。

YouCompleteMeインストール
$ vim +PlugInstall +"sleep 1000m" +qall
$ cd ~/.vim/plugged/YouCompleteMe
$ python3 install.py --clang-completer --system-libclang

以上でインストールは完了です。
試しに簡単なプログラムを書いてvim の補完が効くか確かめてみましょう。

YouCompleteMe でvim によるハッピーなプログラミングを加速させましょう!!

おまけ: Vundle を使う場合

vim-plug の場合との違いは主にVundle の仕様による部分がほとんどですので、細かい説明は割愛させていただきます。
備忘録としてインストールコマンドのみを貼り付けておきます。

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 の仕様による部分がほとんどですので、細かい説明は割愛させていただきます。
備忘録としてインストールコマンドのみを貼り付けておきます。

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

参考

20
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
TsutomuNakamura
Linux 好きなプログラマです。 コミュニケーションはお気軽にしていただけると幸いです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
20
Help us understand the problem. What is going on with this article?