如何调试Neovim的LSP自定义命令

我正在尝试让volar vue语言服务器在Neovim本地LSP中取代vetur。

使用lspconfiglspinstall 我能够创建一个可工作的sumneko_lua自定义安装(虽然与此无关,但由于一些内置的:LspInstall lua的问题,我不得不手动构建)。以下是该代码的副本,并针对尝试使用这个新的vue服务器进行了修改:

local vue_config = require'lspinstall/util'.extract_config('vuels')
vue_config.default_config.cmd = {'node','./node_modules/vscode-vue-languageservice/out/index.js','--stdio'}

require'lspinstall/servers'.newvue = vim.tbl_extend('error',vue_config,{
    install_script = [[
       ! test -f package.json && npm init -y --scope=lspinstall || true
        npm install vscode-vue-languageservice@latest
    ]],
    uninstall_script = nil
})

运行:LspInstall newvue可以正确安装,但是:LspInfo显示此语言服务器已连接到缓冲区(.vue文件)但不活动。我认为问题在于此路径:./node_modules/vscode-vue-languageservice/out/index.js。它存在,但可能不是正确的入口点?默认的vue ls只是具有vls作为命令,因为它提供了一个二进制文件。我是否错过了这个包中的某些东西?我还没有遇到过没有单个二进制文件可供选择的其他语言服务器。

感谢!

点赞
用户88888888
用户88888888

你能尝试使用一个绝对路径到 out.js 文件吗?在我的一个相当复杂的自定义 Volar 安装配置中,我使用的是 /home/myuser/dev/volar/packages/server/out/index.js(其中 volar 文件夹只是整个 volar 克隆的 github 仓库)。我的完整配置在这里

我认为你不能像你所做的那样使用相对路径。我知道你假设 "./node_modules" 意味着 "工作区目录",但很难确定 nvim-lspconfig 打开这些可执行文件的目录在哪里。

我还没有遇到另一个没有一个单一二进制文件可挑选的语言服务器。

Volar 也提供了一个二进制文件,它是 volar-server(在运行 npm i -g @volar/server 后),只是与真正的 volar 一起进行自定义安装(即与本地安装和自定义代码一起使用)时无法使用它。


至于更深入的调试/日志记录,你可以检查 ~/.cache/nvim/lsp.log 以查看语言服务器为什么会详细死机。

2022-01-17 21:45:46