You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neovim配置LSP后保存tsx文件反复弹出选择语言服务器提示如何解决

问题根源

弹窗触发的核心原因是tsserver与EFM两个语言服务同时向Neovim声明自身支持tsx文件的格式化能力,保存触发格式化操作时Neovim无法自动判定调用对象,就会弹出选择提示。
你配置中试图关闭tsserver格式化能力的代码未生效,是因为Neovim 0.8及以上版本中client.resolved_capabilities已被弃用,替换为client.server_capabilities,旧写法不会实际禁用tsserver的格式化声明。

修复步骤

  1. 修改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'}}}
}
  1. 可额外在格式化触发逻辑中添加过滤规则,确保格式化操作只调用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
})
  1. 重启Neovim后配置生效,保存tsx文件不会再弹出选择提示。

内容的提问来源于stack exchange,提问作者jrock2004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 22:54:03