Sublime Text 本身不支持 Lua 调试,所谓“自动化调试”实为构建系统调用外部命令(lua/luajit/love/rojo)+ 正则匹配错误输出 + 工作目录控制的组合策略;真正调试需依赖 lua-language-server/LSP 插件或 Roblox Studio/Love2D 等宿主环境。

Sublime Text 本身不支持 Lua 调试,所谓“自动化调试”实际是构建系统 + 外部工具链的组合策略
Sublime Text 没有内置调试器,也从不解析 Lua 字节码或挂起运行时。你看到的“自动运行”“保存即执行”“错误跳转”,全是靠调用外部命令(lua、luajit、rojo、love)+ 正则匹配错误输出 + 工作目录控制实现的。真正的调试必须离开 Sublime:比如用 lua-language-server 配合 LSP 插件设断点,或在 Roblox Studio / Love2D / WoW 客户端里看日志。Sublime 只负责把你的修改快速喂给它们。
保存即运行:用 sublime-project 绑定构建系统 + 文件监视
纯靠 Ctrl+B 太手动。要接近“自动化”,得让保存动作触发构建:
- 新建项目:
Project → Save Project As…,存为mygame.sublime-project - 编辑该文件,加入以下字段(注意缩进必须是空格,不能用 Tab):
{ "build_systems": [ { "name": "Lua (love)", "cmd": ["love", "."], "working_dir": "$project_path", "selector": "source.lua.enhanced" } ], "settings": { "save_on_focus_lost": true, "file_watcher": { "enable": true, "ignore": ["*.log", "build/"] } } } - 再装插件
AutoBuild(通过 Package Control 安装),它会监听保存事件并自动触发当前构建系统 - ⚠️ 注意:
love必须在终端能执行;$project_path下必须有main.lua和conf.lua,否则love .会失败
错误点击跳转失效?file_regex 必须和你实际用的解释器报错格式严格对齐
常见现象:构建面板显示 test.lua:12: attempt to call a nil value,但点击这行没跳转——说明 file_regex 没匹配上。
- 标准 Lua(
lua命令)错误格式:file.lua:行号: 错误信息→ 用"file_regex": "^([^:]*):([0-9]+):? (.*)$" - Luajit 错误带列号:
file.lua:行号:列号: 错误信息→ 改成"file_regex": "^([^:]*):([0-9]+):([0-9]+):? (.*)$" - Roblox 的
rojo build输出含 ANSI 颜色码,正则会失效 → 改用"shell_cmd": "rojo build 2>&1 | sed 's/\[[0-9;]*m//g'"清洗后再匹配 - Windows 中文路径下,
lua.exe报错可能变成乱码路径 → 最稳解法是彻底避开中文路径,连项目文件夹都用英文名
为什么改了 PATH 还是 command not found?Sublime 启动时只读一次环境变量
这是最常被忽略的硬限制:Sublime 在启动瞬间读取系统 PATH,之后你无论怎么改环境变量、重开终端、甚至重启电脑,只要 Sublime 进程没杀干净,它就继续用旧 PATH。
- Windows:任务管理器中结束所有
subl.exe和Sublime Text.exe进程,再重新打开 - macOS:命令行执行
killall -u $USER "Sublime Text",或 Activity Monitor 中强制退出 - Linux:
pkill -f "subl|sublime" - 更稳妥的做法:在
.sublime-build的cmd字段里写死绝对路径,比如["/opt/homebrew/bin/lua", "$file"]或["C:/lua/lua.exe", "$file"]
真正卡住人的从来不是 JSON 语法或插件名字,而是解释器路径是否真实存在、Sublime 是否真读到了它、错误输出是否被正则捕获——三者缺一不可。别在构建文件里反复试,先确保终端里敲一遍 lua test.lua 能跑通、能报错、能跳到正确行号,再回来配 Sublime。


















