根本原因是file_regex未匹配Lua实际错误格式;标准格式为文件名:行号:信息,需用"^(1):([0-9]+):?(?:[0-9]+)?:?(.)$"等精准正则提取路径与行号。: ↩

file_regex 写错导致 Ctrl+Click 不跳转到报错行
根本不是插件或设置没生效,而是 file_regex 没匹配上 Lua 实际输出的错误格式。Sublime 依赖这个正则从终端输出里提取文件名、行号、列号,匹配失败就只能干瞪眼。
常见错误现象:test.lua:5: attempt to call a nil value 点不了;或者点了跳到第 0 行、跳到错误文件外的其他文件。
- 标准 Lua(5.1–5.4)默认错误格式是
文件名:行号: 错误信息,推荐用"^(*?):([0-9]+):?([0-9]*):? (.*)$" - Luajit 错误末尾常带列号,如
test.lua:5:12: attempt to call...,就得改成"^(.*?):([0-9]+):([0-9]+):? (.*)$" - Windows 中文路径下,若 lua.exe 是 5.4+,还可能因编码错位让行号偏移——这时别硬调正则,先挪到英文路径测试
- 别用网上流传的
"^(?:lua:)?.*?:(\d+):.*$"这类模糊写法,它会把print("line:5")里的:5也当行号捕获
selector 不匹配导致 Ctrl+B 完全没反应
不是构建系统“失效”,是 Sublime 根本没把它和你的 .lua 文件关联上。没有 selector,或写错了 scope,Ctrl+B 就像按在空气上。
使用场景:你装了 Lua Enhanced 插件,右下角显示的是 Lua Enhanced,但构建文件里还写着 "selector": "source.lua" —— 这时一定不触发。
- 打开任意 .lua 文件 → 右下角点击语言名 → 查看当前实际 scope(Sublime 控制台里输
view.scope_name(0)也能看到) - 常见值有:
source.lua(内置)、source.lua.enhanced(Lua Enhanced)、source.lua51(某些老插件) -
selector必须一字不差对应,大小写、点、下划线都不能错 - 删掉
selector字段?不行。Sublime 会直接忽略该构建系统,连菜单里都看不到
Windows 中文路径下报 cannot open xxx: No such file or directory
这不是文件真丢了,是 Sublime 用 GBK 读路径,lua.exe(尤其 5.4+)只认 UTF-8,中间一转译,路径字符串就断成乱码,io.open 或 dofile 必然失败。
性能/兼容性影响:这个问题在 Windows 下高频出现,且无法靠改 file_regex 或重装插件解决,属于底层编码链路断裂。
- 最稳解法:把 .lua 文件全移到纯英文路径下,比如
C:/dev/hello.lua - 临时绕过:改用
luajit(对路径编码容忍稍高),但仍有概率失败 - 绝对不要尝试在构建系统里加
shell_cmd或cmd /c来转码——Sublime 构建系统不支持 shell 语法,&&和chcp都会静默失效 - 别信“改 Sublime 设置 encoding=‘UTF-8’ 就行”——那只是编辑器保存文件的编码,不影响它传给 lua.exe 的路径字节流
cmd 路径写错或未验证,导致 command not found
90% 的“配置失败”卡在这步。Sublime 不查你装没装插件,只看能不能在子进程里执行 cmd 数组里的命令。终端里 lua -v 都跑不通,构建系统必跪。
容易踩的坑:macOS GUI 启动的 Sublime 读不到 shell 的 PATH;Linux 发行版默认命令是 lua5.4;Windows 路径含空格却没加引号。
- 务必先在终端验证:
lua -v、luajit -v、where lua(Win)、which lua(macOS/Linux) - macOS 若
which lua输出/opt/homebrew/bin/lua,就在cmd里写死:["/opt/homebrew/bin/lua", "$file"] - Linux 常见真实命令是
lua5.4,cmd就得是["lua5.4", "$file"],不能只写["lua", "$file"] - Windows 路径含空格(如
C:\Program Files\Lua\)时,必须写成["C:/Program Files/Lua/lua.exe", "$file"],斜杠更稳,避免反斜杠转义问题
真正难调的从来不是 JSON 格式或插件名,而是路径编码、scope 名称、命令真实路径这三处——它们不报错,只沉默失效。每次改完,记得彻底退出 Sublime 进程再重启,否则环境变量和插件注册状态都是旧的。











