Vim8ではALE + lightline
でエラー表示を行っていましたが、neovimへの移行にあたってエラーチェックをLanguageClient-neovim
で行うことにしました。
(rustのエラーチェックで使えるものがrls
しか見つからなかったため、敢えてaleじゃなくてもいいと感じたのが発端。)
この際、エラーの取得方法が変わったため、備忘録として残しておきます。
Vim8 : ale.vim + lightline.vim
Neovim : languageClient-neovim + lightline.vim
今回使用したプラグイン
Vim8のエラー表示設定(ALE)
プラグイン管理はShougo氏のdein.vim
を使用しています。
dein.toml
[[plugins]]
repo ='w0rp/ale'
on_cmd =['ALEComplete']
hook_add ='''
letg:ale_linters={ \'python':['pyls'], \'rust':['rls'], \}letg:ale_echo_msg_error_str='E'letg:ale_echo_msg_warning_str='W'letg:ale_echo_msg_format='[%linter%] %code: %%s [%severity%]'letg:ale_open_list=0letg:ale_lint_on_save=0letg:ale_lint_on_text_changed=1'''
[[plugins]]
repo ='itchyny/lightline.vim'
hook_add ='''
set noshowmode
set laststatus=2letg:lightline={ \'colorscheme':'wombat', \'active':{ \'left':[ \['mode','paste'], \['gitbranch','readonly','filename','modified'], \['ale'], \] \}, \'component_function':{ \'gitbranch':'fugitive#head', \'ale':'ALEStatus', \}, \'separator':{'left':"\u2b80",'right':"\u2b82"}, \'subseparator':{'left':"\u2b81",'right':"\u2b83"}, \}function! ALEStatus() abort
letl:count = ale#statusline#Count(bufnr(''))letl:errors =l:count.error +l:count.style_error
letl:warnings =l:count.warning +l:count.style_warning
returnl:count.total ==0 ? 'ALE: OK':'ALE: E:'.l:errors .' '.'W:'.l:warnings
endfunction'''
Neovimのエラー表示設定(LanguageClient-neovim)
エラーチェックを行った結果は、LanguageClient-neovim
の関数ではなく、getqflist()
関数から辞書型で取得できました。
今回は最低限の設定なので、パフォーマンス等の問題はあると思います。良い書き方があれば教えて頂けると幸いです。
dein.toml
[[plugins]]
repo ='autozimu/LanguageClient-neovim'
rev ='next'
build ='bash install.sh'
hook_add ='''
set completeopt-=preview
letg:LanguageClient_autoStart=1letg:lsp_package_path= expand("~/.lsp/")letg:LanguageClient_serverCommands={ \'python':['pyls'], \'c':['clangd'], \'cpp':['clangd'], \'rust':['rls'], \'java':[ \'java', \'-Declipse.application=org.eclipse.jdt.ls.core.id1', \'-Dosgi.bundles.defaultStartLevel=4', \'-Declipse.product=org.eclipse.jdt.ls.core.product', \'-noverify', \'-Xmx1G', \'-jar', \ expand(g:lsp_package_path).'/eclipse.jdt.ls/plugins/org.eclipse.equinox.launcher_1.5.500.v20190715-1310.jar', \'-configuration', \ expand(g:lsp_package_path).'/eclipse.jdt.ls/config_linux', \'-data', \ expand(g:lsp_package_path).'/eclipse.jdt.ls', \], \}'''
[[plugins]]
repo ='itchyny/lightline.vim'
hook_add ='''
set noshowmode
set laststatus=2letg:lightline={ \'colorscheme':'wombat', \'active':{ \'left':[ \['mode','paste'], \['gitbranch','readonly','filename','modified'], \['lsp'], \] \}, \'component_function':{ \'gitbranch':'fugitive#head', \'lsp':'LSPStatus', \}, \'separator':{'left':"\u2b80",'right':"\u2b82"}, \'subseparator':{'left':"\u2b81",'right':"\u2b83"}, \}function! LSPStatus() abort
letl:errors =0letl:warnings =0for item in getqflist()if item["type"]=="E"letl:errors +=1elseletl:warnings +=1endifendforreturnl:errors +l:warnings ==0 ? "LSP: OK":"LSP: E:".l:errors ." "."W:".l:warnings
endfunction'''
おわりに
以上の設定で、外観を変化させずにエラー表示を行うことができました。
しかし、この方法ではエラー・警告が多くなるほど極端にパフォーマンスが落ちます。対策方法を見つけ次第、変更していく予定です。