VirtualTextとは
NeoVim 3.2
で導入された注釈機能。行の最後にバッファとは別にテキストを表示することができる。
使い方
nvim_buf_set_virtual_text({buffer}, {ns_id}, {line}, {chunks}, {opts})
Column | Column |
---|---|
buffer | Buffer番号、カレントバッファなら0を指定 |
ns_id | NamespaceId、任意の数値または0を指定すると適当に割り振られる。nvim_create_namespace()で作るのがベター。 |
line | VirtualTextを出したい行 |
chunks | VirtualTextに出したい文字列とハイライトグループをセットにした配列 |
opts | 現在使われていない |
とりあえず試してみる。
" VirtualTextを作成 :let ns_id = nvim_buf_set_virtual_text(0, 0, 0, [['Hello World']], {}) " 作成したVirtualTextを消す :call nvim_buf_clear_namespace(0, ns_id, 0, -1)
ちゃんと書くとこんな感じ。
" カレントバッファの現在行にVirtualTextを作成 let line = line('.') let buffer = bufnr('') " ns_idは重複等避けるためnvim_create_namespace()で作成 let ns_id = nvim_create_namespace('my-virtual') call nvim_buf_set_virtual_text(buffer, ns_id, line-1, [['Hello World']], {})
色を付ける、ハイライトグループを指定。
ハイライトグループの一覧はこちらが参考になる。
" ハイライトグループである'ErrorMsg'を指定 call nvim_buf_set_virtual_text(buffer, ns_id, line-1, [['Hello World', 'ErrorMsg']], {})
自分で作成したハイライトグループも指定可能。
hi Hoge guibg=#123456 call nvim_buf_set_virtual_text(buffer, ns_id, line-1, [['Hello World', 'Hoge']], {})
複数のテキストを表示する。
call nvim_buf_set_virtual_text(buffer, ns_id, line-1, [['Hello', 'ErrorMsg'], ['World', 'Hoge']], {})
VirtualTextの使いみち
Syntaxチェック
オプションであるg:ale_virtualtext_cursor
を1
にするとVirtualTextが有効になる。
" VirtualTextを有効にする let g:ale_virtualtext_cursor = 1 " prefixの文字列 let g:ale_virtualtext_prefix = ' --> '
カーソルを合わせるだけでどんなエラーが出ているのかわかるので便利っちゃ便利。
カラーコード表示
カラーコードのビジュアルをVirtualTextとして表示する。これはめっちゃいい。
VirtualTextの特徴
- EOL(行の最後)に表示される
- テキストの折返しはされず、途中で見切れる
- Bufferではないので
:ls!
には残らない
なので長文は適しておらず、行によってはVirtualTextが表示できない可能性もある。
行の最後に表示されるので、フォーマットが決まっている場合や、色表示のようにピンポイントで表示するようなことに適している感じ。
ただFloatingWindowとは違い、Bufferではないので複数表示させたとしても動作が重くならない点は利点。
終わり
今の所どうやって使うかはあまり思い浮かばないけど、ピンポイントで使う場面がありそう。
使い方が簡単なのもいい。リアルタイム翻訳とかに使うとビジュアル的に良さそう。