LoginSignup
19
20

More than 5 years have passed since last update.

deoplete-clangで快適C++エディット!!!

Last updated at Posted at 2016-11-24

deoplete-clangとは

deoplete-clangとは,deopleteの補完ソースです.
clangの静的構文解析による補完を簡単に利用することができるので,neovimでC++を書くのが格段に快適になります.
今回はneovimにdeoplete-clangを導入する方法を書きます.
dein.vimと,clangがインストールされていることが前提です.

clangについて,ubuntuを使っているなら以下のパッケージを入れておきましょう.

  • clang
  • libclang-dev

インストール方法

tomlファイルにzchee/deoplete-clangを追加しましょう.
私の設定は以下の通りです.

[[plugins]]
repo = 'zchee/deoplete-clang'
hook_source = '''
let g:deoplete#sources#clang#libclang_path = '/usr/lib/llvm-3.8/lib/libclang-3.8.so.1'
let g:deoplete#sources#clang#clang_header = '/usr/include/clang'
'''

on_ft = ['c', 'cpp', 'cmake']
depends = ['deoplete.nvim']

clangの共有ライブラリ,ヘッダファイルへのパスを指定しています.
g:deoplete#sources#clang#clang_headerは,ヘッダファイルが入っているディレクトリを直接指定するのではなく,
x.x.x/include/が後に続くように設定しましょう.
上の例だと,/usr/include/clang/x.x.x/include/*.hにヘッダファイルが入っています.
READMEに書いてあるので読んでいれば問題ないのですが,私は読んでいなくて2日ほどハマりました.
また,今回は共有ライブラリへのパスを記述しましたが,共有ライブラリが入っているディレクトリを指定しても大丈夫です.

設定は以上です.deoplete#omni#input_patternsの設定も必要ありません.
ここで,なにかC++ファイルを開いて編集してみましょう.
このように,[clang]マーカがついた補完メニューが出現し,deoplete-clangによる補完が有効であることが分かると思います.
Screenshot from 2016-11-24 14-46-55.png

cmakeプロジェクトで使う

deoplete-clangは,.clangというファイルを用意し,

.clang
flags=<flags>

のようにコンパイラに渡すオプションを指定することも可能ですが,JSON Compilation Databaseを利用することも可能です.
cmakeでもJSON Compilation Databaseがサポートされているため,cmakeプロジェクトでもclangを利用した補完が可能です.

例えば,以下のような簡単なプロジェクトを作成します.

├── .clang
├── CMakeLists.txt
├── build
├── main.cpp
└── third_party
    └── picojson
        └── picojson.h
CMakeLists.txt
project(test-cpp CXX)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_CXX_STANDARD 11)
include_directories("third_party/picojson")
add_executable(test-cpp main.cpp)
.clang
compilation_database = "./build"

以下のコマンドでbuildディレクトリにcompilation_database.jsonという名前でJSON Compilation Databaseが生成されます.

mkdir build
cd build
cmake ../ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

これで,deoplete-clangが適切にオプションをつけてclangを呼び出してくれるため,このように補完ができるようになります.
Screenshot from 2016-11-24 15-20-45.png

余談: CMakeLists.txtで補完

余談ですが,deoplete-clangはcmakeファイル内で,コマンド等の補完を行うことも可能です.

これは私のdeoplete-clangの設定の一部です.
on_ftにcmakeが追加されているのがわかるかと思います.

dein_lazy.toml
on_ft = ['c', 'cpp', 'cmake']

こうすると,deoplete-clangに含まれるcmakeの補完ソースが仕事をするようになります.
こちらは特にREADMEに記載がなかったので,deoplete-clangの補完ソースのプログラムを確認している際に気づきました.

Screenshot from 2016-11-24 14-50-56.png

19
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20