1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vim】lightline.vimでLanguageClient-nvimのエラー表示を改良する

Last updated at Posted at 2020-03-08

lightlineで動的にエラー表示を行うには、lightlineに用意されたイベントの仕組みを使う必要があります。
この仕組みをプラグインとして公開しているものはいくつかありますが、既存のLanguageClient-nvim用の設定が適用できない環境があったため、新しくプラグインを書きました。

作ったもの

https://github.com/takiyu/lightline-languageclient.vim
image.png
image.png

これまでの何が問題か

既存のプラグイン・情報

LanguageClient-nvim用のプラグインや記事では組み込み関数getqflist()を使用しているため、QuickFixにエラー情報を載せる設定にしていなければならない、という制約がありました。

すなわち、LanguageClient-nvimの標準の設定で

let g:LanguageClient_diagnosticsList = "Quickfix"

としているなら問題ありません。

しかしそれ以外の出力先にしている場合には、当然ですが正常に動作しません。

let g:LanguageClient_diagnosticsList = "Disabled"  " or Locacion-list or fzf

この項目はvimgrepやジャンプリスト(g:LanguageClient_selectionUI)の兼ね合いを考えた場合に設定することがあります。

やったこと

そこでLanguageClient-nvimが出力する生のエラー情報を用いてlightlineに伝わるようにしました。
LanguageClient#getState(callback)を用いるとcallback関数にstateが渡されるAPIが存在します。
このstateを解析すればよいのですが、中身にvimのdictionary型ではなくてjsonの文字列が含まれているため、よしなにパースしました。
また残念ながらcallbackなAPIなため、合わせてlightline#update()の呼び出し場所も変えています。

使い方

1.通常通りにプラグインをインストールします。

[[plugins]]
repo = 'takiyu/lightline-languageclient.vim'

など。

2.lightline側に表示用の設定をします。

let g:lightline = {}

let g:lightline.component_expand = {
    \   'linter_errors': 'lightline#languageclient#errors',
    \   'linter_ok': 'lightline#languageclient#ok',
    \ }

let g:lightline.component_type = {
    \   'linter_errors': 'error',
    \   'linter_ok': 'left',
    \ }

let g:lightline.active = {
    \   'right': [[ 'linter_errors', 'linter_ok' ]],
    \ }

3.お好みで文字を変えてください。

let g:lightline#languageclient#indicator_ok = 'OK'
let g:lightline#languageclient#indicator_ns = 'N/S'
let g:lightline#languageclient#indicator_e = 'E:%d'
let g:lightline#languageclient#indicator_w = 'W:%d'
let g:lightline#languageclient#indicator_i = 'I:%d'

結論

LanguageClient#getState()で頑張ると、QuickFixに依存しないLanguageClient-nvimのエラー表示が出来ます。

その他

PRお待ちしております。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?