Vim8では`ALE + lightline`でエラー表示を行っていましたが、neovimへの移行にあたってエラーチェックを`LanguageClient-neovim`で行うことにしました。
(rustのエラーチェックで使えるものがrls
しか見つからなかったため、敢えてaleじゃなくてもいいと感じたのが発端。)
この際、エラーの取得方法が変わったため、備忘録として残しておきます。
今回使用したプラグイン
Vim8のエラー表示設定(ALE)
プラグイン管理はShougo氏のdein.vimを使用しています。
[[plugins]] repo = 'w0rp/ale' on_cmd = ['ALEComplete'] hook_add = ''' let g:ale_linters = { \ 'python': ['pyls'], \ 'rust': ['rls'], \} let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %code: %%s [%severity%]' let g:ale_open_list = 0 let g:ale_lint_on_save = 0 let g:ale_lint_on_text_changed = 1 ''' [[plugins]] repo = 'itchyny/lightline.vim' hook_add = ''' set noshowmode set laststatus=2 let g: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 let l:count = ale#statusline#Count(bufnr('')) let l:errors = l:count.error + l:count.style_error let l:warnings = l:count.warning + l:count.style_warning return l:count.total == 0 ? 'ALE: OK' : 'ALE: E:' . l:errors . ' ' . 'W:' . l:warnings endfunction '''
Neovimのエラー表示設定(LanguageClient-neovim)
エラーチェックを行った結果は、LanguageClient-neovimの関数ではなく、getqflist()
関数から辞書型で取得できました。
今回は最低限の設定なので、パフォーマンス等の問題はあると思います。良い書き方があれば教えて頂けると幸いです。
[[plugins]] repo = 'autozimu/LanguageClient-neovim' rev = 'next' build = 'bash install.sh' hook_add = ''' set completeopt-=preview let g:LanguageClient_autoStart = 1 let g:lsp_package_path = expand("~/.lsp/") let g: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=2 let g: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 let l:errors = 0 let l:warnings = 0 for item in getqflist() if item["type"] == "E" let l:errors += 1 else let l:warnings += 1 endif endfor return l:errors + l:warnings == 0 ? "LSP: OK" : "LSP: E:" . l:errors . " " . "W:" . l:warnings endfunction '''
おわりに
以上の設定で、外観を変化させずにエラー表示を行うことができました。
しかし、この方法ではエラー・警告が多くなるほど極端にパフォーマンスが落ちます。対策方法を見つけ次第、変更していく予定です。
コメント