Sublime Text 本身不支持 Lua 调试断点,无法实现暂停执行、单步、变量监视等调试功能;仅能通过构建系统运行脚本、配合 file_regex 定位错误行,或借助 luacheck 等工具做静态检查。

Sublime Text 本身不支持 Lua 调试断点,别白费劲配“调试器”
Sublime Text 没有内置 Lua 调试能力,也没有官方或主流插件提供类似 VS Code 的断点、单步、变量监视功能。所谓“添加调试命令”,实际只能做到:运行脚本(lua)、格式化(pretty_lua)、语法检查(luacheck),但无法暂停执行、查看栈帧或修改运行时变量。
网上部分教程提到“PHP 调试配置迁移到 Lua”,那是错误类比——PHP 构建系统里的 file_regex 只负责解析错误行号,不是调试协议;Lua 没有 DAP(Debug Adapter Protocol)实现,Sublime 也无对应 client 支持。
想让 Ctrl+B 运行 Lua 并准确定位报错行,关键在 file_regex 配置
构建系统输出的错误信息格式决定了能否点击跳转到出错位置。Lua 默认错误输出是:
test.lua:3: attempt to call a nil value (global 'foo')
这个格式必须被 file_regex 正确捕获,否则 Ctrl+Click 不生效。正确写法是:
{
"cmd": ["lua", "$file"],
"file_regex": "^(.*?):([0-9]+):",
"selector": "source.lua"
}
注意几点:
-
file_regex中的括号必须成对,且第一组捕获文件路径,第二组捕获行号——顺序错或漏组会导致跳转失败 - 不要加
"shell": true(尤其 Windows),它会让file_regex失效,因为输出被 shell 包裹了一层 - 路径含空格或中文?直接报错且不提示原因。务必用纯英文路径安装 Lua,比如
C:/tools/lua/bin/lua.exe - 保存为
Lua.sublime-build后,需手动在当前 Lua 文件里通过 Tools → Build System → Lua 切换一次,否则 Ctrl+B 仍走默认系统
给 StyLua 格式化绑定快捷键,command 名必须严格匹配插件注册名
装完 PrettyLua 插件后,快捷键绑定失效的最常见原因是写错了 command 字段。它不是 format_lua、stylua 或 pretty,而是插件源码里 sublime_plugin.TextCommand 子类定义的名称:
{ "keys": ["ctrl+alt+shift+l"], "command": "pretty_lua" }
验证方法只有两个:
- 按
Ctrl+Shift+P,输入pretty,看命令面板里显示的完整条目名(必须一字不差) - 打开控制台
Ctrl+`,执行sublime.log_commands(True),再点菜单栏 Package Settings → Pretty Lua → Format Current File,控制台会打印真实command名
其他易错点:
-
binary路径在Pretty Lua → Settings里填的是可执行文件**全路径不含 .exe**,例如"binary": "C:/tools/stylua",不是stylua.exe - 如果按快捷键没反应,检查右下角状态栏是否显示
Lua语法高亮——如果不是,selector不匹配,pretty_lua命令会被静默忽略
别试图用 Sublime 实现“断点调试”,真要调试就换工具
如果你需要在 print("here") 之前停下、看 table 内容、改变量再继续,Sublime 做不到。目前可靠方案只有:
- 用
mobdebug+ ZeroBrane Studio(轻量、专为 Lua 设计,支持远程 attach) - VS Code +
lua-debug插件(需配合lldebugger编译版 Lua) - 自己加
io.read()或debug.debug()手动打断,但这不算调试,只是暂停
硬要在 Sublime 里“模拟调试”,唯一可行的是把 luacheck 的警告当线索,配合日志打点——但这就回到了“运行→看输出→改→再运行”的原始循环,和调试无关。










