Neovim配置LSP后保存tsx文件反复弹出选择语言服务器提示如何解决
问题根源
弹窗触发的核心原因是tsserver与EFM两个语言服务同时向Neovim声明自身支持tsx文件的格式化能力,保存触发格式化操作时Neovim无法自动判定调用对象,就会弹出选择提示。
你配置中试图关闭tsserver格式化能力的代码未生效,是因为Neovim 0.8及以上版本中client.resolved_capabilities已被弃用,替换为client.server_capabilities,旧写法不会实际禁用tsserver的格式化声明。
修复步骤
- 修改tsserver配置中关闭格式化能力的代码,替换为适配对应Neovim版本的写法:
local lspconfig = require 'lspconfig' lspconfig.tsserver.setup { on_attach = function(client, bufnr) -- Neovim 0.8+ 写法 client.server_capabilities.documentFormattingProvider = false client.server_capabilities.documentRangeFormattingProvider = false -- 若使用Neovim 0.7及更早版本,保留下面的旧写法即可 -- client.resolved_capabilities.document_formatting = false on_attach(client, bufnr) end, settings = {diagnostics = {globals = {'on_attach'}}} }
- 可额外在格式化触发逻辑中添加过滤规则,确保格式化操作只调用EFM服务,彻底避免冲突:
-- 示例:保存自动格式化时指定仅调用efm vim.api.nvim_create_autocmd("BufWritePre", { pattern = {"*.ts", "*.tsx", "*.js", "*.jsx", "*.lua"}, callback = function() vim.lsp.buf.format({ filter = function(client) return client.name == "efm" end, timeout_ms = 2000 }) end })
- 重启Neovim后配置生效,保存tsx文件不会再弹出选择提示。
内容的提问来源于stack exchange,提问作者jrock2004
相关产品推荐
相关产品推荐

