sublime text 配置 lua 运行环境的前提是终端能执行 lua -v;需先确保系统安装 lua 并正确配置 path,再创建严格符合 json 规范的 lua.sublime-build 文件,其中 cmd、selector(须与 luaenhanced 插件匹配为 source.lua.enhanced)、file_regex 和保存路径(packages/user/)四者缺一不可。

终端能跑 lua -v 才能配成功
Sublime 不自带 Lua 解释器,所谓“一键运行”就是调系统命令。如果终端敲 lua -v 报 command not found,后面所有配置都无效。
- Windows:用
where lua查路径;没输出就去 luabinaries 下预编译包,解压后把含lua.exe的目录加进系统 PATH - macOS:用
which lua;若为空,推荐brew install lua@5.4(Apple Silicon);注意 GUI 启动的 Sublime 可能读不到 shell PATH,建议记下实际路径(如/opt/homebrew/bin/lua),后续构建文件里直接写死 - Linux:很多发行版默认装的是
lua5.4,命令名不是lua,得用ls /usr/bin/lua*确认,然后在构建配置里严格匹配
改完 PATH 必须彻底退出 Sublime 进程再重启——它只在启动时读一次环境变量。
LuaEnhanced 插件决定语法高亮和自动提示基础
装了插件不等于生效。右下角语言标识必须显示 Lua Enhanced,否则 require 跳转、注释折叠、函数参数提示这些功能全挂。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Package Control: Install Package - 搜
LuaEnhanced安装(别装lua-sublime这类废弃包) - 安装后打开任意
.lua文件,点右下角语言名 → 选Lua Enhanced - 如果仍无高亮,检查是否被其他插件干扰,可临时禁用其他 Lua 相关插件再试
Lua.sublime-build 文件必须满足四个硬性条件
JSON 格式极其脆弱,一个中文引号、多一个逗号、缩进混用 tab,都会静默失效(Ctrl+B 没反应,也不报错)。
-
"cmd"必须是你终端里真实能敲通的命令:比如luajit -v有输出,就得写["luajit", "$file"];Windows 上建议写["lua.exe", "$file"],避免扩展名解析问题 -
"selector"必须跟插件注册的语言 ID 对齐:LuaEnhanced 注册的是source.lua.enhanced,这里就不能写source.lua,否则 Sublime 根本不绑定构建系统 -
"file_regex"决定错误点击能否跳转:标准 Lua 错误是test.lua:5: attempt to call a nil value,正则用"^(*?):([0-9]+):?([0-9]*):? (.*)$";luajit 带列号(如:5:12)就得改成"^(.*?):([0-9]+):([0-9]+):" - 别用
"shell_cmd":像"shell_cmd": "cd $file_path && lua $file_name"在 Sublime 构建系统里不支持&&,会直接失败;要用"working_dir": "$file_path"显式指定工作目录
文件保存路径必须是 Packages/User/(可通过 Preferences → Browse Packages… 打开),后缀必须是 .sublime-build,例如 Lua.sublime-build。
中文路径、空格路径导致 cannot open xxx: No such file or directory
这个问题在 Windows 上最典型,本质是 Sublime 用系统 ANSI 编码(如 GBK)读取路径,而 lua.exe(尤其 5.4+)只认 UTF-8 路径,中间一转就丢字符。
- 临时解法:把项目移到纯英文、无空格路径下(如
C:\lua\demo\) - 长期解法:在构建配置里加
"encoding": "UTF-8"字段(部分版本支持),但更稳妥的方式是确保系统区域设置里“当前语言用于非 Unicode 程序”设为“中文(简体,中国)”,并重启 Sublime - 交互式脚本(比如用
io.read())在 Sublime 构建窗口里无法输入——这不是配置问题,是 Sublime 的构建系统不提供 stdin 交互能力,这类脚本得去终端手动跑
真正卡住人的从来不是 JSON 怎么写,而是 lua 命令在哪、selector 对不对、路径编码怎么转——这三个点漏掉一个,整个流程就断在黑盒里。











