解决Neovim打开自身配置文件时的报错问题

问题描述

今天使用 Neovim 打开它自己的配置文件时,出现报错信息

1
LSP[lua_ls] Your workspace is set to `/home/foobar`. Lua language server refused to load this directory. Please check your configuration.[learn more here](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder)

这个错误信息的意思是,Lua 语言服务器(lua_ls)被你的编辑器(如 VS CodeNeovim)告知,要将整个 /home/foobar 目录作为工作区进行扫描,而服务器由于性能或安全方面的考量,拒绝了这个指令。这通常是一个配置问题,可以通过正确设置工作区解决。

解决方案

在你的Neovim配置目录下创建.luarc.json文件,明确告诉lua_ls这就是项目根据目录。即

~/.config/nvim/.luarc.json
1
2
3
4
5
6
7
8
9
{
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
"runtime.version": "Lua 5.1",
"workspace.ignoreDir": [
"node_modules",
".git",
"dist"
]
}

其中:runtime.version一行,指明了兼容Lua 5.1版本。同时使用workspace.ignoreDir来忽略无关目录,以提高性能,所以需要配置这个忽略列表。

为什么之前会报错?

  • 默认情况下,nvim-lspconfiglua_ls 如果没有找到项目根目录,会回退到使用当前工作目录(vim.loop.cwd())。如果你是在主目录下启动 Neovim(例如直接运行 nvim ~/.config/nvim/init.lua),那么当前工作目录就是 /home/foobar,导致 lua_ls 被设置为扫描整个主目录,从而触发拒绝。

  • 创建 .luarc.json 后,root_pattern 会优先匹配,从而正确设置工作区。

  • 按上述步骤操作后,错误信息就会消失,LSP 功能也能正常使用。