必须安装sumneko.lua和actboy168.lua-debug插件,正确配置lua.runtime.path指向可执行文件,并在.luarc.json中设置runtime.path与runtime.version,三者缺一不可;否则vscode对lua仅为纯文本编辑。

装对插件、配准解释器路径、声明项目级配置,三者缺一不可;少一个,VSCode 里写 Lua 就是纯文本编辑器。
sumneko.lua 插件必须装,否则所有语法提示都是假的
VSCode 自身不支持 Lua,sumneko.lua 是目前唯一提供完整 LSP 支持的语言服务器插件。它负责语法检查、Ctrl+Click 跳转、require 路径解析、table.unpack 和 utf8.len 等 API 识别——这些能力全靠它驱动。
- 只认作者是
sumneko的那个(图标是蓝色“L”或蛇形图案),别点EmmyLua、Lua (by castorini)、Run on Save这类老插件 - 安装后第一次打开
.lua文件会自动下载语言服务器二进制,卡在 “Downloading server” 多半是网络问题:可手动下载 Release 包,解压到%USERPROFILE%\AppData\Roaming\Code\User\globalStorage\sumneko.lua(Windows)或~/Library/Application Support/Code/User/globalStorage/sumneko.lua(macOS) - 装完必须重启 VSCode,且打开任意
.lua文件后,状态栏右下角要出现Lua (running)—— 没这个,后面全是空转
lua.runtime.path 必须指向可执行文件,不能是目录或错误路径
sumneko.lua 启动时要调用本地 Lua 解释器做 AST 分析,不是可有可无的配置项。路径写错,语言服务器根本起不来,现象就是状态栏一直卡在 Lua: Starting... 或直接不显示。
- 路径必须是可执行文件,例如:
/usr/local/bin/lua(macOS/Linux)、C:/Program Files/Lua/lua.exe或D:/DevTools/Lua54/lua54.exe(Windows,注意用正斜杠或双反斜杠) - 不能写成
C:\lua这种目录路径,也不能漏掉.exe - 终端里先运行
lua -v或lua54 -v确认能输出版本,再配这个字段;即使 PATH 已包含,也建议显式指定,避免 fallback 到默认的 5.1 行为 - 验证方式:打开
.lua文件,看状态栏是否出现Lua (running)—— 这是最直接有效的判断依据
.luarc.json 里不配 runtime.path,require 就永远标红
sumneko.lua 默认只扫描工作区根目录下的 ?.lua 和 ?/init.lua,完全不读取运行时的 package.path。你项目结构是 src/utils/string.lua,写 require "utils.string",它就直接报 Module not found。
- 在项目根目录建
.luarc.json(不是settings.json),内容示例:{"runtime.path": ["src/?.lua","src/?/init.lua"]} - 路径是相对于工作区根目录的,不是当前文件;多个路径用数组,顺序决定查找优先级
- 如果用 Lua 5.4+,必须加
"runtime.version": "Lua 5.4",否则table.pack、string.match新参数会误报 - 改完后必须手动执行命令
Restart Lua Server(Ctrl+Shift+P 输入即可),不重开文件也生效
调试必须装 actboy168.lua-debug,launch.json type 字段不能写错
sumneko.lua 不处理断点和变量查看,调试功能由 actboy168.lua-debug 提供,两个插件缺一不可。常见错误是断点灰色、点不动,或者报 Debug adapter process has terminated unexpectedly。
- 装完
actboy168.lua-debug后,按 Ctrl+Shift+D → “create a launch.json file” → 选lua自动生成模板 -
"type": "lua"必须小写、不能写成luajit或debug;"request": "launch"(本地脚本)或"attach"(连游戏进程),别混用 -
"program": "${file}"表示运行当前文件;若需固定入口,写死如"./main.lua" - 如果用 LOVE2D、NodeMCU 等环境,
.luarc.json中还要加"diagnostics.globals"声明全局变量,否则love.draw、node.restart全被标红
最容易被忽略的是:.luarc.json 是 per-project 配置,而 settings.json 里的 lua.* 设置是全局生效的;路径、版本、globals 这三样,一旦写错位置,轻则功能失效,重则污染其他项目。











