return { "stevearc/conform.nvim", event = { "BufWritePre" }, cmd = { "ConformInfo" }, init = function() vim.api.nvim_create_user_command("ConformDisable", function(args) if args.bang then -- FormatDisable! will disable formatting just for this buffer vim.b.disable_autoformat = true else vim.g.disable_autoformat = true end end, { desc = "Disable autoformat-on-save", bang = true, }) vim.api.nvim_create_user_command("ConformEnable", function() vim.b.disable_autoformat = false vim.g.disable_autoformat = false end, { desc = "Re-enable autoformat-on-save", }) end, keys = { { -- Customize or remove this keymap to your liking "f", function() require("conform").format({ async = true, lsp_fallback = true }) end, mode = "", desc = "Format buffer", }, }, -- Everything in opts will be passed to setup() opts = { -- Define your formatters formatters_by_ft = { xml = { "xmlformatter" }, lua = { "stylua" }, python = { "isort", "black" }, javascript = { "prettierd", "prettier", stop_after_first = true }, }, -- Set up format-on-save --format_on_save = { timeout_ms = 500, lsp_fallback = true }, format_after_save = function(bufnr) -- Disable with a global or buffer-local variable if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then return end return { timeout_ms = 500, lsp_format = "fallback" } end, -- Customize formatters formatters = { shfmt = { prepend_args = { "-i", "2" }, }, }, }, }