Add conform.nvim for auto-formatting

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
xfy 2026-05-28 11:22:05 +08:00
parent 861fd3c03c
commit a282113ccf
3 changed files with 49 additions and 1 deletions

View File

@ -1,5 +1,45 @@
local lazy = require("lazy")
-- conform.nvim - BufWritePre 懒加载
local function setup_conform()
local function biome_or_prettier()
if vim.fs.find({ "biome.json", "biome.jsonc" }, { upward = true, stop = vim.uv.os_homedir() })[1] then
return { "biome-check", "biome", stop_after_first = true }
end
return { "prettier" }
end
require("conform").setup({
formatters_by_ft = {
lua = { "stylua" },
go = { "gofumpt", "goimports" },
javascript = biome_or_prettier,
typescript = biome_or_prettier,
javascriptreact = biome_or_prettier,
typescriptreact = biome_or_prettier,
json = biome_or_prettier,
css = { "prettier" },
html = { "prettier" },
markdown = { "prettier" },
toml = { "taplo" },
},
format_on_save = function(bufnr)
if vim.b[bufnr].autoformat == false or vim.g.autoformat == false then
return nil
end
return { timeout_ms = 500, lsp_fallback = true }
end,
})
end
lazy.on_event("conform", "BufWritePre", "*", function(args)
setup_conform()
-- 首次保存时手动触发格式化setup 注册的 autocmd 不会在同一次事件中生效)
if vim.b[args.buf].autoformat ~= false and vim.g.autoformat ~= false then
require("conform").format({ bufnr = args.buf, timeout_ms = 500, lsp_fallback = true })
end
end)
-- mason + LSP 配置延迟到 VimEnter避免启动时加载
lazy.on_event("lsp", "VimEnter", "*", function()
require("mason").setup()
@ -34,7 +74,10 @@ end)
-- LSP keymaps
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" })
vim.keymap.set("n", "gh", vim.lsp.buf.hover, { desc = "Hover" })
vim.keymap.set("n", "<leader>fm", vim.lsp.buf.format, { desc = "Format Local buffer" })
vim.keymap.set("n", "<leader>fm", function()
lazy.load("conform", setup_conform)
require("conform").format({ lsp_fallback = true })
end, { desc = "Format buffer" })
vim.keymap.set("n", "df", vim.diagnostic.open_float, { desc = "Show line diagnostics" })
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code action" })

View File

@ -6,6 +6,7 @@ vim.pack.add({
{ src = "https://github.com/nvim-treesitter/nvim-treesitter", branch = "main" },
"https://github.com/neovim/nvim-lspconfig",
"https://github.com/mason-org/mason.nvim",
"https://github.com/stevearc/conform.nvim",
"https://github.com/tpope/vim-fugitive",
})

View File

@ -1,5 +1,9 @@
{
"plugins": {
"conform.nvim": {
"rev": "619363c30309d29ffa631e67c8183f2a72caa373",
"src": "https://github.com/stevearc/conform.nvim"
},
"friendly-snippets": {
"rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9",
"src": "https://github.com/rafamadriz/friendly-snippets"