C++ source for Shougo/deoplete.nvim: Dark powered asynchronous completion framework for neovim/Vim8
- 設定項目を増やす
-std
のオプション- localなプロジェクトに対する設定(e.g. 設定ファイルの自動読込)
- 他の
deoplete-xxx
を参考にリファクタリング - 無駄な補完処理が走らないように,キャッシュを有効利用
- 自動pch作成機能
- 編集中のファイルのカレントディレクトリから上にさかのぼり,
*.pch
が存在するときに,補完を行う- つまり,
*.pch
がない場合には何も行わない
- つまり,
Precompiled Header and Modules Internals — Clang 7 documentation
Plug 'umaumax/deoplete-clang-with-pch', {'for': ['c','cpp','cmake']}
let g:deoplete#sources#clang_with_pch#flags = []
let g:deoplete#sources#clang_with_pch#include_pathes = ['/usr/local/Cellar/llvm/6.0.0/include']
let g:deoplete#sources#clang_with_pch#pch_pathes = []
g:deoplete#sources#clang_with_pch#flags
がないときはg:deoplete#sources#clangflags
の値が使用される
#include
のみのヘッダファイルを作成- 例えば,対象cppファイルに対して,
grep '#include' | grep -v '//'
- 例えば,対象cppファイルに対して,
- pch作成
clang++ -cc1 -x c++-header -emit-pch -std=c++11 -stdlib=libc++ header.h -o header.h.pch
- 利用
- build:
clang++ -cc1 -include-pch header.h.pch -std=c++11 test.cpp -o test
- 補完:
clang++ -cc1 -include-pch header.h.pch -fsyntax-only -code-completion-at=test:<line>:<col> -std=c++11 test.cpp
- build:
-cc1
は位置に注意(clang++
の直後が安全)-v
オプションを利用するとよい-cc1
の場合には-stdlin=libc++
を付加しないと,C++11ヘッダ群が見つからない(-Xclang
利用時は不要)-std
オプションはPCH作成時と利用時に一致させること
ちなみに,PCHを利用しない補完では,-Xclang
オプションで利用可能
clang++ -Xclang -fsyntax-only -Xclang -code-completion-at=test.cpp:<line>:<col> -std=c++11 test.cpp -c
ちなみに,Ubuntu16.04では,-cc1
のオプション利用時にinclude pathを別途追加する必要がある
e.g.
clang++ -cc1 -emit-pch -x c++-header -std=c++11 -stdlib=libstdc++ $target -o $target.pch \
-I/usr/include/clang/5.0.0/include \
-I/usr/include \
-I/usr/include/c++/5.4.0 \
-I/usr/include/x86_64-linux-gnu/c++/5.4.0
上記のinclude pathは下記の-Xclang
コマンド版を参考するとよい
-Xclang
版では余計なオプションが軒を連ねるので,確認後-cc1
で生成し直す
clang++ -Xclang -emit-pch -x c++-header -std=c++11 header.h -o header.h.pch
なお,補完時に必要なinclude pathは減っていた
clang++ -cc1 -include-pch $target.pch -fsyntax-only -code-completion-at=$target:$line:$col -std=c++11 $target \
-I/usr/include/c++/5.4.0