🕌

lspsaga.nvimを使う

2022/10/09に公開

https://github.com/glepnir/lspsaga.nvim

A light-weight lsp plugin based on neovim's built-in lsp with a highly performant UI.

LspSagaとは、Neovimのbuild-in LSPに基づいた軽量で高機能なUIプラグインです(よわよわ英語)。

主にLSPのUI面を強化するプラグインで、vim.lsp.buf.hover()などのbuilt-inに含まれるコマンドの代用を多く用意しており、見た目をいい感じにしたり便利な機能を追加したりできます。LSP機能の本体はmason.nvimなどで別途設定する必要があります。

2021年4月〜2022年5月の間はパッタリ更新が途絶えていたのですが、ここ数ヶ月怒涛の勢いでcommitされているので今後機能の更新があるかもしれませんし、現時点で動作が不安定な部分もあります。使う場合は頻繁にアップデートしたり公式サイトを確認するなどしてください。なお現時点で :help はありません。

公式のREADME.mdに丁寧な解説やGIFがたくさんあるのでそちらを見ても大丈夫です。それはそれとして日本語の紹介が少なかったので布教の意味も含めてまとめてみました。

インストール

依存プラグインなどは特にありません。symbol_in_winbarなどの一部の機能を使う場合はnvim 0.8+が必要です。

.config/nvim/init.lua
require("packer").startup(function()
  use 'ibhagwan/fzf-lua'
end)

設定

デフォルトのまま使う場合でもrequire("lspsaga").init_lsp_saga()してください。パラメータは必要に応じて変更できます。公式に推奨設定などがありますので、そちらも参照してください。

.config/nvim/init.lua
require("lspsaga").init_lsp_saga({
  border_style = "single",
  symbol_in_winbar = {
    enable = true,
  },
  code_action_lightbulb = {
    enable = true,
  },
  show_outline = {
    win_width = 50,
    auto_preview = false,
  },
})

vim.keymap.set("n", "K",  "<cmd>Lspsaga hover_doc<CR>")
vim.keymap.set('n', 'gr', '<cmd>Lspsaga lsp_finder<CR>')
vim.keymap.set("n", "gd", "<cmd>Lspsaga peek_definition<CR>")
vim.keymap.set("n", "ga", "<cmd>Lspsaga code_action<CR>")
vim.keymap.set("n", "gn", "<cmd>Lspsaga rename<CR>")
vim.keymap.set("n", "ge", "<cmd>Lspsaga show_line_diagnostics<CR>")
vim.keymap.set("n", "[e", "<cmd>Lspsaga diagnostic_jump_next<CR>")
vim.keymap.set("n", "]e", "<cmd>Lspsaga diagnostic_jump_prev<CR>")

vim.keymap.set("n", "<A-d>", "<cmd>Lspsaga open_floaterm<CR>")
-- vim.keymap.set("n", "<A-d>", "<cmd>Lspsaga open_floaterm lazygit<CR>")
vim.keymap.set("t", "<A-d>", [[<C-\><C-n><cmd>Lspsaga close_floaterm<CR>]])

コマンド一覧

  • hover_doc
    カーソル下の変数/関数の情報を表示

  • show_line_diagnostic / show_cursor_diagnositc
    カーソル下・カーソル行のError/Warningを表示

  • diagnostic_jump_next / diagnostic_jump_prev
    ドキュメント内のError/Warningへジャンプ

  • rename
    変数/関数の名前を一括変更

  • code_action
    実行可能な修正の候補を表示(Organize import, Remove unnecessarry 'await' ...)

ここまでは基本的にはbuild-inの機能と同じです。一部がcmd領域ではなくフロートウィンドウに表示されるくらいの違いでしょうか。


  • peek_defenition
    変数/関数の定義元を表示

  • lsp_finder
    変数/関数の一覧を表示

  • :LSoutlineToggle
    ドキュメント内にある関数・変数・構造体・メソッドといったシンボルのアウトラインを表示します。

変数や関数の定義元に直接ジャンプするのではなくフロートウィンドウに表示するので、中身をちょっと見たいだけで開く必要はない、という時などに重宝します。

lsp_finderについては定義・宣言・参照・実装を一度に見れるので、built-inの機能よりも確実に便利です。

Float Terminal

  • open_floaterm / close_floaterm

端末をnvim上に表示させる機能です。lazygitなどと連携させたり開発中のプログラムを実行するなどといった使い方ができます。

外観

GIFを見ていただいてもわかるとおり、ファイルの情報を画面上に表示してくれる機能もあります。

カスタマイズしたり、マウスクリックと合わせて使うこともできるようです。

  • symbol_in_winbar (nvim 0.8+)
    ウィンドウの上部に変数やメソッドなどのシンボルを表示します。main.rs > f mainなどというのがそうです。

  • code_action_lightbulb
    Code Actionが実行可能な位置を教えてくれます。💡(電球?)のマークがついてるところでLspsaga code_actionを実行すれば何か出てきます。

終わりに

まだまだ開発途中のプラグインなので不安定だったりするのはご愛嬌です。一部の機能だけでも使ってみてはいかがでしょうか。

Discussion