nvim: Intelligent format on save

This commit is contained in:
2026-05-04 17:07:01 +02:00
parent f18c82ec15
commit 5983aafe31

View File

@@ -6,7 +6,35 @@ return {
conform.setup(opts)
vim.keymap.set({ "n", "v" }, "<leader>cp", function()
vim.api.nvim_create_user_command("FormatDisable", function(args)
if args.bang then
vim.b.disable_autoformat = true
else
vim.g.disable_autoformat = true
end
end, {
desc = "Disable autoformat-on-save (! = current buffer only)",
bang = true,
})
vim.api.nvim_create_user_command("FormatEnable", function()
vim.b.disable_autoformat = false
vim.g.disable_autoformat = false
end, { desc = "Re-enable autoformat-on-save" })
vim.keymap.set("n", "<leader>cf", "<cmd>FormatDisable!<cr>", {
desc = "Format: disable autoformat for this buffer",
})
vim.keymap.set("n", "<leader>cF", "<cmd>FormatDisable<cr>", {
desc = "Format: disable autoformat globally (session)",
})
vim.keymap.set("n", "<leader>ce", "<cmd>FormatEnable<cr>", {
desc = "Format: re-enable autoformat",
})
vim.keymap.set("n", "<leader>cw", function()
conform.format({
lsp_fallback = true,
async = false,
@@ -32,5 +60,21 @@ return {
typescript = { "prettier" },
yaml = { "prettier" },
},
format_on_save = function(bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
local fname = vim.api.nvim_buf_get_name(bufnr)
if fname ~= "" then
local marker = vim.fs.find(".no-autoformat", {
upward = true,
path = vim.fs.dirname(fname),
})[1]
if marker then
return
end
end
return { timeout_ms = 2000, lsp_fallback = true }
end,
},
}