`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>