`on_attach`に設定する。[[Neovim]]のバージョンは0.9.5。
```lua
{
"nvimtools/none-ls.nvim",
config = function()
local null_ls = require("null-ls")
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
null_ls.setup({
sources = {
null_ls.builtins.formatting.prettier,
},
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ async = false })
end,
})
end
end,
})
end
}
```
> [!hint] 保存するたびに2回以上フォーマットされる場合
> [[Language Server]]自身がフォーマット機能を持っている場合、`vim.lsp.buf.format()`コマンドでそれが実行され、[[none-ls.nvim]]のsourceに指定された[[フォーマッター]]と重複して実行されることがある。
>
> [[LSPクライアントのフォーマッターを無効化 (none-ls.nvim)|LSPクライアントのフォーマッターを無効化]]するような設定を追加してやればよい。
## 参考
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Formatting on save</p>
<p class="link-card-description">null-ls.nvim reloaded / Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - nvimtools/none-ls.nvim</p>
</div>
<img src="https://opengraph.githubassets.com/b047e6aa863859fe72dbe361bb6063f03cf4cd1cca779d63e0ab37a84e42d5b6/nvimtools/none-ls.nvim" class="link-card-image" />
</div>
<a href="https://github.com/nvimtools/none-ls.nvim/wiki/Formatting-on-save"></a>
</div>