必须通过Preferences → Key Bindings打开右侧可编辑面板编辑User.sublime-keymap,内容须为合法JSON数组格式,保存即生效;宏文件需置于Packages/User/下、以res://开头引用、命名全小写加下划线;快捷键失效主因是command名错误、args结构缺失或宏文件JSON非法;限定语言需用context字段配合selector,调试启用sublime.log_commands(True)查调用。

怎么打开正确的 User.sublime-keymap 文件
必须通过 Preferences → Key Bindings 打开,右侧那个可编辑的面板才是 User.sublime-keymap。左侧是只读的默认配置,改了也无效,还会被升级覆盖。
首次打开时右侧常为空,但必须写成合法 JSON 数组格式——哪怕只加一条规则,也得用方括号 [ ] 包裹,例如:
[{"keys": ["ctrl+alt+m"], "command": "run_macro_file", "args": {"file": "res://Packages/User/MyMacro.sublime-macro"}}]
保存后立即生效,不用重启、不用 reload。右下角弹红字?90% 是 JSON 错:末尾多逗号、引号用成中文、keys 里写了 Ctrl+D(必须小写 ctrl+d)。
宏命令文件名和路径怎么写才不报错
Sublime 的宏不是直接执行函数,而是靠 run_macro_file 命令加载一个 .sublime-macro 文件。这个文件必须放在 Packages/User/ 目录下,且路径要写全、大小写敏感。
-
args.file的值必须以res://开头,不能写相对路径或绝对路径 - 常见错误写法:
"file": "MyMacro.sublime-macro"(缺前缀)、"file": "Packages/User/MyMacro.sublime-macro"(漏res://) - 正确写法:
"file": "res://Packages/User/MyMacro.sublime-macro" - 文件名里不能有空格或特殊字符,建议全小写 + 下划线,如
format_js.sublime-macro
为什么快捷键按了没反应?重点查这三处
宏命令绑定后静默失效,基本不是逻辑问题,而是这三个地方卡住了:
-
command名写错:必须是run_macro_file,不是run_macro或play_macro -
args缺失或结构错:args必须和keys、command同级,且里面必须是{"file": "..."},不能漏掉args外层对象 - 宏文件本身无效:新建的
.sublime-macro文件必须是合法 JSON 数组,每条操作是一个对象,例如[{"command": "insert", "args": {"characters": ";"}}];空文件、单个对象(非数组)、多出逗号都会导致整个宏加载失败
想让宏只在特定语言里生效?加 context 就行
宏命令默认全局可用,但你可能只想在 Python 文件里触发格式化,或只在 CSS 中运行对齐。这时要用 context 字段限定作用域:
[{"keys": ["ctrl+alt+f"], "command": "run_macro_file", "args": {"file": "res://Packages/User/FormatCSS.sublime-macro"}, "context": [{"key": "selector", "operator": "equal", "operand": "source.css"}]}]
怎么知道当前文件的 selector?打开该文件,按 Ctrl+Shift+P 输入 show_scope_name 回车,状态栏会显示类似 source.python 或 source.css 的字符串——那就是你要填进 operand 的值。
注意:context 是“且”关系;如果想让宏在 Python 或 JavaScript 里都生效,得写两条独立规则,不能在一个 context 里塞两个 operand。
真正容易被忽略的是:宏文件内容本身没有语法高亮、没有错误提示,写错一个逗号就整个不执行,而且 Sublime 不报任何信息。调试时最稳的方式是先用控制台确认宏是否被调用——按 Ctrl+` 输入 sublime.log_commands(True),再按快捷键,看控制台有没有输出 command: run_macro_file。没有?说明快捷键根本没绑定成功;有但没效果?那问题一定出在宏文件内容或路径上。











