Neovim配置Phpactor根目录时遇退出码255错误的求助
嘿,我看到你在配置Neovim+Phpactor的时候碰到了退出码255的问题,日志里明确提示“Phpactor语言服务器必须用根URI初始化,但提供了NULL”,这个问题其实是Phpactor没拿到它需要的项目根目录信息导致的,我来帮你梳理下解决方案:
首先,核心问题出在你的root_dir配置上——你现在是硬编码返回固定路径,但这种方式可能不符合Neovim LSP客户端的传递规范,导致Phpactor接收不到正确的根目录URI。给你几个具体的调试和修复步骤:
调整root_dir的配置逻辑
不要直接硬编码路径,改用LSP官方推荐的根目录识别方式:先自动检测项目里的标识文件(比如composer.json、.git或者phpactor.json),如果检测不到再回退到你的固定路径。这样既符合规范,也能保证Phpactor拿到正确的根URI。修改后的配置片段如下:phpactor = { cmd = { "phpactor", "language-server" }, filetypes = { "php" }, root_dir = function(fname) -- 优先自动识别项目根目录,识别失败再用你的固定路径 local auto_root = require('lspconfig.util').root_pattern('composer.json', '.git', 'phpactor.json')(fname) return auto_root or '/srv/home/milos/projects/legacy-php' end, on_new_config = function(config, root_dir) config.cmd_cwd = root_dir config.cmd_env = vim.fn.environ() end, }这里的
root_pattern会自动在当前文件的上级目录查找指定标识文件,找到后就把该目录作为项目根,非常适配遗留项目的场景。先手动验证Phpactor本身是否正常
先脱离Neovim,在终端里直接测试Phpactor能不能正常启动:cd /srv/home/milos/projects/legacy-php phpactor language-server如果终端里能正常运行(不会立刻报错退出),说明Phpactor本身没问题,问题肯定出在Neovim的配置传递上;如果终端里也报错,那你需要先检查Phpactor的安装是否完整,或者给项目加个基础配置文件(比如空的
composer.json也行)。检查root_dir函数的参数
你原来的root_dir函数没有接收参数,但Neovim的LSP客户端调用这个函数时,会传递当前编辑文件的路径作为参数。哪怕你硬编码路径,最好也保留参数位,避免隐性的调用错误——也就是把函数写成function(fname)而不是function()。
按照上面的步骤调整后,应该就能解决“根URI为NULL”的问题,Phpactor也能正常启动了。
内容来源于stack exchange

