真实可用的 command 名需通过 ctrl+shift+p 搜索或 sublime.log_commands(true) 实时捕获;user.sublime-keymap 必须是合法 json 数组,字段全英文半角,keys 小写短横线,command 和 args 正确嵌套,context 控制触发场景。

怎么找到真实可用的 command 名?
Sublime 不会告诉你命令名写错了,它只会静默忽略——按了没反应,90% 是 command 字段填错了。别猜,也别信旧教程里写的 js_format 或 beautify,这些早被插件升级干掉了。
- 按
Ctrl+Shift+P打开命令面板,输入功能关键词(比如“delete line”),看到的完整条目就是真实command值,例如run_macro_file - 更准的办法:按
Ctrl+`打开控制台,输入sublime.log_commands(True),然后手动点一次菜单里的目标操作(如“Edit → Line → Delete Line”),控制台会打出类似command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"}的日志 - 插件命令必须查该插件最新文档或用
Ctrl+Shift+P实测,format_code这种名字大概率已失效,实际可能是eslint_fix或autopep8
user.sublime-keymap 文件怎么写才不报错?
右下角突然弹红条?基本就是 JSON 格式崩了。这个文件对语法极其敏感,一个中文引号、多一个逗号、少一个方括号都会让整条规则失效。
- 右侧
User.sublime-keymap文件首次打开是空的,但必须是一个合法 JSON 数组:以[开头、]结尾,哪怕只加一条规则也要包进去 - 每条规则是对象,至少含
"keys"和"command"两个字段,例如:{ "keys": ["ctrl+alt+l"], "command": "eslint_fix" } - 多条规则之间用英文逗号分隔,末尾不能有逗号
- 所有标点必须是英文半角,引号必须是英文双引号,
keys里的键名要小写、用短横线连接("ctrl+shift+k"✅,不是"Ctrl+Shift+K"❌)
怎么让快捷键只在特定场景生效?
想让 Tab 键只在非注释行补全,或让 Ctrl+D 在无选区时复制整行、有选区时仍选词?靠 context。
-
context是个数组,里面每个对象是“且”关系,全部满足才触发 - 常见判断项:
"selection_empty"(是否无选区)、"selector"(当前语法类型,如"source.python")、"preceding_text"(光标前文本) - 屏蔽注释行示例:
{"key": "preceding_text", "operator": "not_regex_contains", "operand": "^\s<em>//|^\s</em>#"} - 想实现“或”逻辑?不行,得拆成两条独立规则,分别写不同
context
带参数的命令怎么传 args?
很多命令没 args 就根本不干活,比如打开命令面板、跳转函数列表、运行宏——args 必须是字典,嵌套在命令对象里,不能平级写。
- 正确写法:
"command": "show_overlay", "args": {"overlay": "goto", "text": "@"} - 路径类参数要用
res://协议,比如调内置宏:"file": "res://Packages/Default/Delete Line.sublime-macro",别写本地路径或相对路径 - 参数类型必须匹配:比如
open_file要字符串file,insert_snippet要contents字符串或name路径
改完保存就生效,不用重启。但最常卡住的地方其实是:JSON 格式对、command 名对、args 对、context 条件也对——结果快捷键还是没反应,这时候得看是不是在查找面板、终端或输入框里按的,那些区域默认不响应你定义在编辑器里的快捷键。











