Sublime Text宏需用Ctrl+Q(Win/Linux)或Cmd+Q(macOS)录制,仅记录键盘操作,不录鼠标和面板操作;保存为Packages/User/下以.sublime-macro为后缀的文件,并通过快捷键或命令面板调用,路径须写全。

怎么录制宏:从按下 Ctrl+Q 开始
Sublime Text 的宏不是靠菜单点出来的,得用快捷键触发。Windows/Linux 按 Ctrl+Q 开始录制,macOS 是 Cmd+Q;再按一次就停止。录制期间所有按键、光标移动、编辑操作(包括 Ctrl+Z 撤销)都会被记下——但鼠标点击、右键菜单、面板切换(比如命令面板或侧边栏操作)不会被记录。
常见错误是录完发现宏没效果,大概率因为: - 录制时误触了鼠标,导致光标跳到意外位置 - 用了未绑定快捷键的操作(比如手动点“Convert Indent to Spaces”,它没对应快捷键就录不进去) - 在多行选中状态下开始录制,后续回放时选区状态不一致,行为错乱
怎么保存和调用宏:别存在默认路径里
录制完别急着运行,先存成文件,否则重启 Sublime 就丢了。按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入 Save Macro,选中它,给个名字比如 format_json.sublime-macro。注意后缀必须是 .sublime-macro,且建议存在 Packages/User/ 目录下(可通过 Preferences → Browse Packages… 打开)。
调用方式有两种:
- 快捷键:在 Preferences → Key Bindings 里加一条,例如:
[{"keys": ["ctrl+alt+j"], "command": "run_macro_file", "args": {"file": "Packages/User/format_json.sublime-macro"}}]
- 命令面板:按 Ctrl+Shift+P,输入 Run Macro,再选你存的文件名
容易忽略的是路径写法:如果宏文件放在 Packages/User/,file 字段必须写全 Packages/User/xxx.sublime-macro,不能只写文件名,也不能用相对路径。
宏为什么有时“跑偏”:光标位置和上下文敏感
宏本质是机械回放按键流,不理解语义。所以它对初始状态极其敏感:
- 如果录制时是在单行末尾按了 Enter + TAB,回放时若光标在行中或行首,缩进可能错乱
- 录了 Ctrl+F → 输入 “foo” → Enter → Ctrl+D,那回放时当前文件必须有 “foo”,否则 Ctrl+D 会失败(没匹配项可高亮)
- 多光标操作(如 Ctrl+Click)无法录制,但 Ctrl+D 这类基于文本的选择可以
调试技巧:把宏内容拖出来看。它只是 JSON 数组,每项是 {"command": "...", "args": {...}}。打开 .sublime-macro 文件,就能确认是否录进了预期命令,比如 insert、move、set_selection 等。
替代方案比宏更稳:什么时候该换用插件或 Python 脚本
如果任务涉及判断逻辑(比如“只对注释行做处理”)、跨文件操作、正则替换或需要用户输入,宏立刻力不从心。这时候直接写个 .py 插件更可靠:
在 Packages/User/ 下新建 toggle_quotes.py,内容类似:
import sublime, sublime_plugin
class ToggleQuotesCommand(sublime_plugin.TextCommand):
def run(self, edit):
for region in self.view.sel():
text = self.view.substr(region)
if text.startswith("'") and text.endswith("'"):
self.view.replace(edit, region, '"' + text[1:-1] + '"')
elif text.startswith('"') and text.endswith('"'):
self.view.replace(edit, region, "'" + text[1:-1] + "'")
然后绑定快捷键,就比录一堆光标移动+替换的宏清晰得多。
真正需要宏的场景其实很窄:纯线性、无分支、光标起始态可控的重复编辑,比如“删空行→去行首空格→保存”。其余情况,花 5 分钟写个命令,省下未来 50 次调试宏的时间。










