Ubuntu18.04でneovim(or vim8)+LanguageClient-neovim+clangdでC++の補完をする

普段はMacで使ってますが,TwitterUbuntuで上手くいかなかった人がいるみたいなのでやってみました.

必須なやつ

インストール手順

dein.vimとneovimのインストール手順は省きます.(他に書いてる人がたくさんいるので)

clangd

clangも一緒にインストールしておきます

sudo apt install clang-6.0 clang-tools-6.0
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 100
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 100
sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-6.0 100

LanguageClient-neovim

tomに書いてください.tomlに書いてない場合,適宜読み替えてください.

[[plugins]]
repo = 'Shougo/dein.vim'

# vim8用
[[plugins]]
repo = 'roxma/nvim-yarp'
if = "!has('nvim')"

# vim8用
[[plugins]]
repo = 'roxma/vim-hug-neovim-rpc'
if = "!has('nvim')"

[[plugins]]
repo = 'Shougo/deoplete.nvim'
hook_add = '''
let g:deoplete#enable_at_startup = 1
'''

[[plugins]]
repo = 'autozimu/LanguageClient-neovim'
rev = 'next'
depends = ['deoplete.nvim']
build = 'bash install.sh'
hook_add = '''
set hidden
let g:LanguageClient_serverCommands = {
      \ 'cpp': ['clangd'],
      \ }
let g:LanguageClient_loadSettings = 1
let g:LanguageClient_hasSnippetSupport = 0

set completefunc=LanguageClient#complete

nnoremap K :call LanguageClient#textDocument_hover()<CR>
nnoremap F :call LanguageClient#textDocument_formatting()<CR>
'''

結果

同様に,prabirshrestha/asyncomplete-lsp.vimを使ってもできます. これに関してはkutimoti氏が記事を書いてくれているのでどうぞ.

kutimoti.hatenablog.com

また,cquery-project/cqueryなどでも同様です.

kutimoti.hatenablog.com