我在让 groovy-language-server 在 neovim 中正常工作时遇到一些问题。
当我在新缓冲区中打开
.groovy
文件时,我可以看到一条消息,指示 LSP 客户端启动失败:Client 1 quit with exit code 1 and signal 0
好吧,很酷,所以我使用
:LspLog
检查日志,我可以看到此错误:Error: Unable to access jarfile groovy-language-server-all.jar
。 (另外,如果有人有任何关于如何清除 LSP 日志或仅获取日志文件尾部的提示,那会很方便,我的系统打开这些日志会非常缓慢,因为它至少有 300,000 行长)。
错误信息是:
[ERROR][2024-02-23 18:24:57] .../vim/lsp/rpc.lua:734 "rpc" "/Users/wmoorby/.sdkman/candidates/java/current/bin/java" "stderr" "Error: Unable to access jarfile groovy-language-server-all.jar\n"
我认为我可能会收到此错误,因为我正在使用 SDKMan 管理我的 java 版本,因此我尝试并安装了来自不同供应商的几个不同版本的 java,但总是得到相同的结果。我不相信是因为这个。
接下来我去寻找 Mason 存储所有已安装软件包的位置。我注意到你可以在 Mason 配置中使用
install_root_dir = path.concat { vim.fn.stdpath "data", "mason" }
设置目录,因此为了找到这个位置,我在 neovim 中执行了 :!echo $PATH
。我发现PATH中的位置是/Users/wmoorby/.local/share/nvim/mason/bin
。我导航到这个目录并浏览了一下以找到 groovy LSP 包。在 groovy-language-server Github page 上的自述文件的帮助下,我发现 .jar
工件位于 groovy-language-server/build/libs
中,并且我尝试使用 :LspLog
运行
java -jar groovy-language-server-all.jar
中所述的工件我认为它有效吗?我执行命令,没有收到任何错误,然后,我的终端保持原样,我认为这意味着服务器正在该终端进程中运行,并且正在等待客户端附加自身。
但是,我还是不知道为什么在neovim中无法执行。我检查了该文件的权限,发现它不可执行,但执行的是 java,而不是工件本身。我还检查了用于运行
java -jar groovy-language-server-all.jar
的 shell 脚本包装器,它也可以工作(我认为这个 shell 脚本是在 neovim 内启动 LSP 时运行的)
所以你需要像这样设置lspconfig:
require'lspconfig'.groovyls.setup{
cmd = { "groovy-language-server" },
...
}