宏卡顿主因是命令链含阻塞操作,如插件补全、查找失败或面板弹出致串行等待;保存后更慢因路径校验与JSON解析开销;多行处理失效源于上下文错位而非性能问题。

宏回放卡顿或延迟,大概率是命令链里混进了阻塞操作
Sublime 的宏本质是串行执行 JSON 命令列表,每条命令都得等上一条完成才能触发下一条。一旦某步需要等待外部响应(比如插件补全、查找匹配、面板弹出),整个链就卡住——你看到的“慢”,其实是宏在干等。
常见阻塞点包括:
• insert 后紧跟 tab,但当前文件类型不支持 Emmet 或插件未启用
• find_under_expand(Ctrl+D)找不到匹配项,命令失败但不报错,后续动作全部偏移
• show_panel 类命令(如 {"command": "show_panel", "args": {"panel": "find"}})会挂起宏,直到面板手动关闭
- 录制时全程禁用
ctrl+f、ctrl+shift+p、ctrl+g等会打开面板的操作 - 避免依赖插件功能:比如用
emmet_expand_abbreviation就不如直接insert固定字符串可靠 - 用
select_line或move_to显式锚定光标位置,别指望“当前选区”稳定存在
为什么保存后的 .sublime-macro 文件回放比内存宏还慢
不是文件读取慢,而是路径解析和命令校验多了一层。Sublime 加载 run_macro_file 时,会先验证 file 路径是否在 Packages/User/ 下,再逐行解析 JSON 结构、检查 command 名是否为合法 text_command——任何语法错误(比如多一个逗号、少一个引号)都会让整条链静默跳过,看起来像“卡住”或“没反应”。
- 保存后立刻用
ctrl+shift+p输入Run Macro,看你的文件名是否出现在列表里;不出现=路径或命名错误 - 打开
Packages/User/xxx.sublime-macro直接看 JSON 是否合法:用在线 JSON 校验器粘贴内容,或 Sublime 自带的ctrl+shift+p → Set Syntax: JSON看是否有高亮异常 - 删掉所有
undo、redo类命令——它们不改变文本,只增加解析开销
多行批量处理时宏变慢,其实是上下文错位导致重复重试
比如你录了“选一行→加前缀→换行”,想对十行执行。但宏里没强制选行,只记了 ctrl+l。回放时若光标不在行首,ctrl+l 可能只选中光标后半行,后续插入就错位,Sublime 会默默跳过失败步骤,最终效果像“只处理了前三行”。这不是性能问题,是鲁棒性缺失。
- 在宏开头加
{"command": "move_to", "args": {"to": "bof"}}或{"command": "select_line"}强制初始化状态 - 避免用
ctrl+d依赖文本内容匹配;改用move+expand_selection控制范围 - 如果真要处理多行,优先考虑
ctrl+shift+l拆行后多光标编辑,宏只负责单行动作,更稳更快
绑定快捷键后首次触发慢,之后正常?那是 Package 加载延迟
Sublime 默认懒加载插件和包资源。第一次调用 run_macro_file 时,它要临时加载 Packages/User/ 下的全部宏定义(哪怕只用一个),这个过程不可见但可感知。第二次起就缓存住了。
- 不用等它“预热”:把最常用的宏文件名按字母序排前面(如
a_format.sublime-macro),Sublime 会优先扫描 - 别在宏里调
exec或shell_exec——这些命令必须等子进程返回,完全脱离宏的同步模型 - 真正影响体验的是命令粒度:把 10 行小操作合并成 1 个
insert,比拆成 10 个insert快得多,JSON 解析开销直降



















