NvChad中添加biome.json后格式化生效,vtsls是否自动切换至Biome?
问题解答
这种隐式切换属于正常行为
你遇到的情况是Neovim(尤其是NvChad这类预设配置)里的常见逻辑:格式化工具的优先级会受项目本地配置文件影响。
- 之前没有
biome.json时,你的JS/TS文件格式化大概率由vtsls(Vue/TS语言服务)处理,而vtsls默认的格式化规则并不强制添加分号,或者NvChad的格式化逻辑没有优先调用Biome。 - 当你添加
biome.json后,NvChad的格式化模块(通常基于内置LSP格式化或配套插件)检测到Biome的配置文件,会自动优先调用Biome处理JS/TS文件的格式化——哪怕你配置的是默认值,配置文件的存在相当于明确告诉编辑器:“用Biome来处理这个项目的代码规范”。
Biome本身确实默认semicolons: "always",但它的激活逻辑可能依赖本地配置文件的存在,或者NvChad的规则是只有当工具的配置文件存在时,才会将其列为优先格式化提供者。
你并未遗漏必要的显式配置,但可以主动控制优先级
这种隐式切换不算配置遗漏,但如果你想避免依赖配置文件触发工具切换,可以显式指定格式化工具的优先级:
比如在NvChad的custom/configs/lspconfig.lua中,针对JS/TS文件配置优先使用Biome格式化:
local lspconfig = require("lspconfig") local on_attach = function(client, bufnr) -- 禁用vtsls的格式化能力,让Biome独占 if client.name == "vtsls" then client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false end end lspconfig.biome.setup({ on_attach = on_attach, capabilities = require("cmp_nvim_lsp").default_capabilities(), }) lspconfig.vtsls.setup({ on_attach = on_attach, capabilities = require("cmp_nvim_lsp").default_capabilities(), })
或者如果你用的是NvChad内置的conform.nvim格式化插件,可以在custom/configs/conform.lua中指定优先级:
local conform = require("conform") conform.setup({ formatters_by_ft = { javascript = { "biome" }, typescript = { "biome" }, -- 其他文件类型配置... }, })
这样无论有没有biome.json,都会优先用Biome处理JS/TS文件的格式化,避免隐式切换的不确定性。
内容的提问来源于stack exchange,提问作者Mykola Zotko
相关产品推荐
相关产品推荐

