vim8,neovimで補完使うならdeopleteよりvim-lsp使おうぜ

つい最近,vscodeC++導入の記事を書きました

kutimoti.hatenablog.com

vscodeMicrosoftが作ったC++拡張機能にはLanguage Server Protocol(LSP)という技術が使われています

qiita.com

LSPは他の言語にももちろん対応しています(C#のOmniSharpとか)

これが補完などの処理を行ってくれます

neovimのC++補完

今まで僕は,deoplete-clangやdeoplete-xclangを使ってきましたが,

「(多分)毎回"clang"の呼び出しを行っているのが原因で補完などの動作がvscodeに比べて遅い」

印象を受けていました

vimでもLSPを使うものが無いかと調べると出てきました

github.com

(作ってる人がMicrosoftの方)

ここを見れば簡単に導入できると思います

install

まずclangdをインストールします

sudo pacman -S llvm clang-tools-extra

deinを使ってインストールしています(それぞれの環境に合わせてインストールしてください><)

[[plugins]]
repo='prabirshrestha/async.vim'

[[plugins]]
repo='prabirshrestha/vim-lsp'
hook_add='''
if executable('clangd')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'clangd',
        \ 'cmd': {server_info->['clangd']},
        \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
        \ })
endif

let g:lsp_signs_enabled = 1         " enable signs
let g:lsp_diagnostics_echo_cursor = 1 " enable echo under cursor when in normal mode

let g:lsp_signs_error = {'text': '✗'}
let g:lsp_signs_warning = {'text': '‼'}
<i></i>
'''

[[plugins]]
repo='prabirshrestha/asyncomplete.vim'

[[plugins]]
repo='prabirshrestha/asyncomplete-lsp.vim'

[[plugins]]
repo='prabirshrestha/asyncomplete-neosnippet.vim'
hook_add='''
call asyncomplete#register_source(asyncomplete#sources#neosnippet#get_source_options({
    \ 'name': 'neosnippet',
    \ 'whitelist': ['*'],
    \ 'completor': function('asyncomplete#sources#neosnippet#completor'),
    \ }))
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)
'''

補完

f:id:Kutimoti:20180520105926p:plain

Rename

f:id:Kutimoti:20180520110006p:plain

f:id:Kutimoti:20180520110020p:plain

f:id:Kutimoti:20180520110030p:plain

エラー表示

bits/stdc++11.hをインクルードしても全く重くならなかったのですごい(すごい)

他にもコマンドはあるのでぜひ使ってみてください