今までWindowsで開発してたけど、ある理由でlinuxで開発をすることになった
linuxで快適にC++開発がしたくていろいろ試行錯誤して環境構築したので忘れないようにメモ
なお、今回用いた環境はUbuntu 16.04LTSである
どんな環境を求めたか
- vim上で編集、コンパイル、デバッグが(簡単に)できる
- C++のコード補完もしたい(Intellisenseっぽく)
- デバッグはVisualStudioみたいにソースエディタ上でしたい(ブレークポイント設定とか)
結局どういう環境にしたか
- エディタにneovim
- コンパイラにclang、デバッガにlldb
- lldbフロントエンドにlldb.nvim
- C++補完にYouCompleteMe
What is neovim?
vimと互換性を保った、新しいエディタ
旧来のvimはベースが古く改修がしづらく、新機能が盛り込めなかったために開発された
内部構造が抜本的に変更され、今までのvimではできなかった様々なことができるようになる
(今回neovimを使ったのもプラグインがnvim専用だったから)
What is clang & lldb?
clangは、アップルが主導で開発を進めているオープンソースのC/C++,Objective-Cコンパイラ
gccよりもかなり最近に開発され、コンパイルが軽量、ライセンスが緩いなどの特徴がある
lldbはclangでコンパイルされたプログラム用のCUIベースのデバッガ(操作感はgdbに近い)
今回自分がclangを選んだのはVisualStudioでAndroid ndkの開発してた時に手触り感がgccより良かったから
導入手順
1.clang,lldbのインストール
普通にapt-getするだけ。
$ sudo apt-get install clang lldb
2.neovimをインストール
以下のページを参考にした。
Installing Neovim · neovim/neovim Wiki
dein.vimを使ってみる - Qiita
まずはneovimのリポジトリを追加する。
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:neovim-ppa/unstable
$ sudo apt-get update
追加できたらapt-getでインストールする
$ sudo apt-get install neovim
・設定ファイルについて
vimでは起動時に~/.vimrcを読み込んでいたが、
neovimでは、環境変数${XDG_CONFIG_HOME}に格納されたパス内にnvimフォルダを作り、そこのinit.vimを読むらしい。
とりあえず~/.config以下に設定しておく。 ~/.bashrcに1行追加する
export XDG_CONFIG_HOME="$HOME/.config"
現在のセッションでも同様にexportしておく。これで以後は~/.config/nvim/init.vimを編集すればよい。
(vimと設定を共有したければ~/.vimrcへのsym linkを張っておいてもいいかも)
・プラグインマネージャ導入
あとは、プラグインマネージャとしてdeinを簡単に導入しておく
まずはdein.vim本体をcloneする
$ mkdir -p ~/.vim/dein/repos/github.com/Shougo/dein.vim
$ git clone https://github.com/Shougo/dein.vim.git \
~/.vim/dein/repos/github.com/Shougo/dein.vim
init.vimにdeinを起動するコードを書く
"Dein initializationif&compatiblesetnocompatibleendifsetruntimepath+=~/.vim/dein/repos/github.com/Shougo/dein.vimcall dein#begin(expand('~/.vim/dein'))call dein#add('Shougo/dein.vim')"ここに call dein#add('プラグイン名') の行を追加していくcall dein#end()
なお、init.vimにプラグインを追加した後は、nvim上で以下のコマンドを実行しインストールする
:call dein#install()
以上で完了である
2.lldb.nvimの導入
lldb.vimを導入するにはneovimにpython-clientを入れないといけないらしい。
・python-clientの導入
以下のサイトを参考にした。
https://github.com/neovim/python-client
pipを使ってpython2にneovimのパッケージをインストールするだけ。
(pipを入れてなければsudo apt-get install python2-pip
で入れておく)
$ pip2 install neovim
・本体の導入
基本は普通のプラグインと同様に追加すればよいが、一点だけ注意が必要。
まずはinit.vimのdein#begin
とdein#end
の間に一行追加する。
call dein#begin(expand('~/.vim/dein'))"(中略)call dein#add('critiqjo/lldb.nvim')"(中略)call dein#end()
neovimを再起動し、call dein#install()
を実行する
そして重要なのが、インストールの後に:UpdateRemotePluginsを実行することだ
これはlldb.nvimがRemotePluginをいう新機能を利用していることに起因する
neovimを再起動し、以下のコマンドを実行する
:UpdateRemotePlugins
以上で完了である
・使い方について
Youtubeにサンプル動画があった。
https://youtu.be/rd654OxlmQs
- ソースファイルを開いた状態で:LLSession newで、デバッグモードの準備をする
- :LLmode debugでデバッグウィンドウ表示
- あとは:LL {cmd}でコマンドを実行できるので :LL rなり:LL sなり:LL cなりでデバッグ
- ちなみに
:nmap <M-b> <Plug>LLBreakSwitch
とかするとAlt+Bで選択した行のBreakPointの設定ができるらしい。(詳しくは:h lldb-mappings参照)
3.YouCompleteMeのインストール
以下のサイトを参考にした。
YouCompleteMe の設定で疲れた - Diary over Finite Fields
まずは、さっきと同様にdeinでリポジトリ'Valloric/YouCompleteMe'
を追加し、インストールする
YouCompleteMeはC++で動くので、インストール後は以下のようにしてコンパイルする
$ cd ~/.vim/dein/repos/github.com/Valloric/YouCompleteMe
$ python2 ./install.py --clang-completer --system-libclang
しばらく待つとコンパイルが完了する
・補完設定について
編集中のディレクトリ(もしくは親ディレクトリ)に「.ycm_extra_conf.py」というファイルがあるとそれを補完設定として読み込むらしい
サンプルが同梱されてるのでとりあえずそれをデフォルトに設定しておく。init.vimに一行追加
letg:ycm_global_ycm_extra_conf ='~/.vim/dein/repos/github.com/Valloric/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
とりあえずこれでC++を自動で補完してくれるようになる上、文法チェックまでやってくれる。
Intellisenseにも全く引けを取らない出来である。(しかも動作はむしろYCMのほうが速い)
素晴らしい。
まとめ
linuxでも、かなり高性能な開発環境を(しかも無料で)構築できることが分かった。
みんなもneovim + clang + lldb + lldb-nvim + YouCompleteMeで Let's enjoy!