👻

Neovim Built-in LSPでフォーマッタの競合を回避する

2023/04/23に公開

prettiernull-ls経由で導入した際,tsserverのフォーマッタと競合して不便だったのでその回避策をまとめる.

解決方法

結論から言うと,vim.lsp.buf.format()filterオプションを使いtsserverのフォーマッタだけを無効化すればよい.

vim.lsp.buf.format()にはfilterというオプションがある.
これを使えば,LSPフォーマッタを有効にするか無効にするかをクライアントごとに指定できる.

filterには,LSPのクライアントを受け取りboolean値を返す関数を指定する必要がある.
trueが返された場合,そのクライアントのフォーマッタが有効化される.falseが返された場合は無効化される.

vim.lsp.buf.format({
    filter = function(client)
	-- ここにフィルタ設定を記述
    end
})

例えば,tsserverのフォーマッタだけを無効化したいときは以下のように設定すればよい.

vim.lsp.buf.format({
    filter = function(client)
	return client.name ~= "tsserver"
    end
})

参考

Discussion