Sublime 宏录制需用 Ctrl+Q/Cmd+ Q 触发,禁用鼠标和非编辑操作;回放失效主因是光标错位、上下文丢失或未保存;保存须为 Packages/User/ 下 xxx.sublime-macro 文件,绑定快捷键时路径和命令名须严格匹配。

怎么开始录制:别点菜单,直接按快捷键
Sublime 的宏录制不是靠菜单“点一下启动”,它靠的是隐式快捷键触发——Ctrl+Q(Windows/Linux)或 Cmd+Q(macOS)。按一次进入录制,再按一次停止。状态栏右下角会闪现 Recording macro,没看到就说明没录上,或者已经停了。
常见错误是去点 Tools → Record Macro,这个菜单项在多数版本里实际不生效;更糟的是,点了之后误以为“已开始”,结果后续操作全没录进去。
- 全程必须用键盘:Home/End 移动、
Ctrl+L选整行、Ctrl+D多词选中——鼠标点击、拖选、右键、菜单操作一律不记录 - 录制中禁用所有非编辑动作:不能按
Ctrl+Shift+P(命令面板)、Ctrl+F(查找)、不能保存文件、不能打开侧边栏,否则宏中断或存入无效指令 - 建议先在空白文件试跑一遍完整流程,比如“End → ; → Enter”,确认光标落点和输入节奏干净再正式录
回放为什么没反应:三个高频断点
点了 Tools → Playback Macro 却只动光标、不输字符,甚至完全没反应?大概率卡在这三个地方:
- 光标位置错位 :宏默认只作用于当前光标所在行或选区,不是全文批量执行。你录的是“删当前行”,回放前就得先把光标移到目标行首
- 命令上下文丢失 :录制时按了
Tab触发 Emmet 补全,但回放时当前文件类型不支持 Emmet(比如 .txt),动作就卡住 - 宏没保存就关了 Sublime:刚录完没手动
Tools → Save Macro,宏只存在内存里,重启后彻底消失——它不像 VSCode 的 Macros 插件能自动持久化
验证是否录对,最快方法是:停止录制后立刻按 Ctrl+Shift+P,搜 Playback Macro 并执行,看是否复现原动作。不行就重录,别试图“修”错的宏。
保存宏和绑定快捷键:路径写错就永远找不到
保存宏不是点“确定”就完事。必须满足三个硬条件,缺一不可:
- 文件名必须以
.sublime-macro结尾,例如add_semicolon.sublime-macro;禁用中文、空格、大写字母(AddSemicolon.sublime-macro和add_semicolon.sublime-macro是两个文件) - 必须保存到
Packages/User/目录下——这是 Sublime 唯一认的用户宏根路径,不能手动改成本地绝对路径,也不能填./xxx.sublime-macro - 绑定快捷键时,
file参数必须严格匹配该路径:"file": "Packages/User/add_semicolon.sublime-macro";拼错大小写、漏掉Packages/、多加斜杠都会失效
快捷键配置示例(加到 Preferences → Key Bindings 右侧用户设置中):
{"keys": ["ctrl+alt+;"], "command": "run_macro_file", "args": {"file": "Packages/User/add_semicolon.sublime-macro"} }
注意:command 必须是全小写 run_macro_file,不能写成 Run_Macro_File 或 run-macro-file;组合键里避免单独用 Shift(如 ["shift+;"] 无效)。
宏文件能手动改:JSON 结构就是你的控制台
宏文件本质是 JSON,打开 Packages/User/xxx.sublime-macro 就能看到清晰的命令序列,比如:
[{"command": "move_to", "args": {"to": "eol"}}, {"command": "insert", "args": {"characters": ";"}}]
这意味着你可以:
- 删掉某条命令:比如去掉最后的
{"command": "move", "args": {"by": "lines", "forward": true}},让它不自动跳行 - 复制粘贴命令块:宏本身不支持循环,但可以手动展开成三次
move_to+insert,实现“重复三次”的效果 - 插入健壮性指令:加一行
{"command": "select_line"},确保每次操作都基于整行,降低对起始光标位置的依赖
但要注意:所有命令必须是 Sublime 原生支持的 text_command,不能调用插件命令(如 side_bar_files);也不能处理剪贴板内容、跨行正则替换或带判断逻辑的操作(比如“只对含 function 的行操作”)。
最常被忽略的一点:宏对初始状态极其敏感。你录了 Ctrl+F → 输入 "foo" → Enter → Ctrl+D,那回放时当前文件必须有 "foo",否则 Ctrl+D 会失败——没有匹配项可高亮。