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

在Kickstart Neovim中配置denols与ts_ls共存的冲突问题

解决denols与ts_ls缓冲区冲突问题(modular_kickstart + lazy.nvim)

核心思路

通过项目特征区分启动对应的语言服务器:

  • 存在deno.json/deno.jsonc的Deno项目,启用denols
  • 普通Node.js项目(存在package.json/tsconfig.json)或单个JS/TS文件,启用ts_ls

具体配置步骤

找到modular_kickstart中nvim-lspconfig的配置文件(通常位于plugins/lspconfig.lua),修改servers配置:

return {
  'neovim/nvim-lspconfig',
  opts = {
    servers = {
      -- 配置denols
      denols = {
        root_dir = require('lspconfig.util').root_pattern('deno.json', 'deno.jsonc'),
        single_file_support = false, -- 单个文件不启用denols,避免冲突
        on_attach = function(client, bufnr)
          -- 可添加denols专属的自定义配置
        end,
      },
      -- 配置ts_ls
      ts_ls = {
        root_dir = function(fname)
          -- 优先判断是否为Deno项目,是的话返回nil,不启动ts_ls
          local deno_root = require('lspconfig.util').root_pattern('deno.json', 'deno.jsonc')(fname)
          if deno_root then
            return nil
          end
          -- 否则按Node.js项目规则匹配根目录
          return require('lspconfig.util').root_pattern('package.json', 'tsconfig.json', 'jsconfig.json')(fname)
        end,
        single_file_support = true, -- 单个文件启用ts_ls
        on_attach = function(client, bufnr)
          -- 可添加ts_ls专属的自定义配置
        end,
      },
    },
  },
}

额外检查

  1. 确保已通过Mason安装denols:
    :MasonInstall denols
    
  2. 重启Neovim后,打开Deno项目时,运行:LspInfo可确认denols已启动;打开Node.js项目时,ts_ls会正常启动。
  3. 若仍有冲突,可手动控制缓冲区的LSP:
    • 停止当前缓冲区的某一LSP::LspStop ts_ls(或denols)
    • 手动启动指定LSP::LspStart denols(或ts_ls)

内容的提问来源于stack exchange,提问作者Mr.Unforgettable

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:48:24