在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, }, }, }, }
额外检查
- 确保已通过Mason安装
denols::MasonInstall denols - 重启Neovim后,打开Deno项目时,运行
:LspInfo可确认denols已启动;打开Node.js项目时,ts_ls会正常启动。 - 若仍有冲突,可手动控制缓冲区的LSP:
- 停止当前缓冲区的某一LSP:
:LspStop ts_ls(或denols) - 手动启动指定LSP:
:LspStart denols(或ts_ls)
- 停止当前缓冲区的某一LSP:
内容的提问来源于stack exchange,提问作者Mr.Unforgettable
相关产品推荐
相关产品推荐

