Sublime Text 没有真正意义上的宏录制功能,所谓“录制”实为误传;它仅能记录键盘触发的text_command类编辑命令(如insert、move),不支持鼠标操作、UI交互、逻辑判断或插件命令,宏本质是手动编写的JSON命令序列,保存为Packages/User/xxx.sublime-macro后通过run_macro_file调用。

Sublime Text 里根本不能“录制”宏
Sublime Text 没有内置的图形化宏录制按钮,所谓“录制”只是误传。它只支持手动记录操作序列(view.run_command("insert", {"characters": "..."}) 这类底层命令),无法像 VS Code 或 Vim 那样自动捕获鼠标点击、光标拖拽、多步选中等行为。
你看到的“宏录制教程”,基本是把 Tools → Record Macro 和 Tools → Stop Recording 当成真录制——其实它只记录键盘按键对应的编辑命令(比如 insert、move、select_all),且不保存鼠标动作、不支持条件跳转、不兼容插件命令(如 Package Control: Install Package)。
真正能用的宏:靠 macro 文件 + run_macro_file
Sublime 的宏本质是 JSON 格式的命令列表,存为 .sublime-macro 文件。必须手动写或从命令面板导出,再通过 run_macro_file 执行。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),输入View: Show Console,在控制台里执行sublime.log_commands(True),然后手动做一遍想复用的操作(比如删空行、加前缀),控制台会打印出每步对应命令,复制粘贴进 JSON 数组 - 保存为
add_prefix.sublime-macro,内容类似:[{"command": "move_to", "args": {"to": "bof"}}, {"command": "insert", "args": {"characters": "// "}}] - 绑定快捷键:在
Preferences → Key Bindings里加一条:{"keys": ["ctrl+alt+p"], "command": "run_macro_file", "args": {"file": "Packages/User/add_prefix.sublime-macro"}}
哪些操作宏根本处理不了
宏不是万能胶,遇到以下情况直接失效:
- 依赖当前光标位置或选区状态的命令(比如
expand_selection在不同上下文行为不一致,宏里写死参数会错) - 涉及弹窗交互的操作(如
show_overlay、prompt_input),宏无法等待用户输入 - 调用第三方插件的命令(例如
emerald_editor:toggle_comment),除非该插件明确声明支持宏回放 - 正则替换中的动态变量(
$1、\0)在宏里会被当字符串字面量处理,不会实时求值
比宏更靠谱的替代方案
如果目标是批量改代码、自动补模式、跨文件操作,别硬扛宏:
- 用
Ctrl+H(替换)配合正则:比如^(\s*)$→ 留空,删空行;^(.*)$→// $1,统一加注释 - 写 Python 插件:Sublime 的 API 完全开放,
sublime_plugin.TextCommand能精准控制光标、选区、视图状态,比宏稳定得多 - 配合外部工具:用
sed、awk或jq处理文件流,再用Build System集成到 Sublime 里
宏只适合极简、确定、无分支的线性操作。稍复杂一点,就得换思路——不是功能不够,而是设计定位本来就不在这儿。


















