Sublime Text 默认情况下是不认 .lua 文件的语法高亮的。很多人以为是插件没装全,折腾半天才发现,根本原因是 Sublime 压根没把语言定义绑定上去。尤其做游戏开发,经常要用到 love 或 luajit,光有高亮还远远不够,必须把构建系统和工作目录也一并配好,否则寸步难行。
怎么让 .lua 文件一打开就高亮?
打开一个 .lua 文件,如果右下角显示的是“Plain Text”,那就说明还没生效。这不是什么 bug,纯粹是 Sublime 不知道该用哪个语法包来解析它。关键步骤其实很简单:打开任意一个 .lua 文件,点击右下角的语言名,然后从列表里选择 Lua(注意,不是 LuaEnhanced 或 LuaLanguage 这些变体)。之后所有同后缀的文件都会自动识别。
如果你翻遍了列表,根本找不到 Lua 这个选项:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Package Control: Install Package回车 - 搜索
Lua,认准作者是sublimelsp或者官方维护的Lua插件。千万别装LuaExtended,那个已经废弃了,而且正则匹配经常出错 - 装完之后重启 Sublime,再试一次右下角的切换操作
Ctrl+B 运行脚本却报 lua: command not found?
这是环境层面的问题,跟代码本身没关系。Sublime 的构建系统本质上只是调用命令行,它不负责帮你装 Lua,也不会读取你 shell 里配置的 PATH(尤其是在 macOS 上通过 GUI 启动时)。
先别急着配构建系统,打开终端确认一下:
- Windows:运行
where lua或where luajit,看看有没有返回路径 - macOS/Linux:运行
which lua或which luajit - 如果没有输出,说明 Lua 没装,或者没加到系统 PATH 里。这一步绝不能跳过,否则后续所有配置都是白费功夫
验证通过后,就可以新建构建系统了:Tools → Build System → New Build System…,然后粘贴以下内容:
{ "cmd": ["lua", "$file"], "selector": "source.lua", "file_regex": "^(*?):([0-9]+):?([0-9]*):? (.*)$", "working_dir": "$file_path"}
这里有个关键点:"working_dir": "$file_path" 必须加上。因为游戏脚本经常需要读取 assets/ 或 conf.lua 这些文件,如果不设置工作目录,love 启动时就会直接报错,找不到文件。
为什么 print() 输出一闪而过,或者点错行跳不到?
Windows 下窗口闪退,本质上是进程结束得太快;而跳转错行,则是 file_regex 没有匹配上真实的报错格式。
解决闪退问题:
- 把构建命令改成:
"cmd": ["cmd", "/c", "lua", "$file", "&", "pause"](仅限 Windows) - 或者在脚本末尾加一行
io.read(),但这只适用于调试阶段,上线前记得删掉
修复跳转问题:
- 故意写一个错误(比如
print(缺右括号),看看终端里实际报错长什么样 - Lua 5.4 默认的报错格式是
test.lua:3: unexpected symbol near '(',对应的正则可以用"file_regex": "^(*?):([0-9]+): - Luajit 的报错会带上列号,比如
test.lua:3:12: attempt to call a nil value,这时正则就要改成"file_regex": "^(*?):([0-9]+):([0-9]+):
游戏开发绕不开的三个坑
搞定高亮和运行只是第一步,真正写 love 或嵌入式 Lua 的时候,下面这三个点最容易卡住半天:
love脚本必须放在项目根目录下,而且里面要包含main.lua和conf.lua。构建系统里的"cmd"得换成["love", "$file_path"],否则love找不到项目结构- 中文路径下使用
io.open读文件,大概率会出现乱码或者直接失败。即使系统 locale 设置成了 UTF-8,也建议整个项目路径都用纯英文 - Sublime 本身没有调试器。如果你想断点、看变量、单步执行,那就得换用 ZeroBrane Studio,或者用
mobdebug连接真机。构建系统只管“跑起来”,不管“调清楚”