必须通过Ctrl+Shift+P(macOS为Cmd+Shift+P)输入Preferences: Key Bindings打开,右侧可编辑面板即User.sublime-keymap,需以合法JSON数组格式编写,command名须经命令面板或控制台实测获取,保存后立即生效。

怎么打开并编辑正确的 User.sublime-keymap 文件
别去 Packages/User/ 目录下手动找,也别改左侧只读的 Default (Windows).sublime-keymap。唯一稳当路径是:Ctrl+Shift+P(macOS 是 Cmd+Shift+P)→ 输入 Preferences: Key Bindings → 回车。右侧那个可编辑面板就是你要写的 User.sublime-keymap。
首次打开常为空,但必须是合法 JSON 数组——哪怕只加一条规则,也得用方括号 [ ] 包裹。写错格式(比如末尾多逗号、引号没闭合、混入中文标点),快捷键就静默失效,Sublime 连红字提示都不给。
保存后立即生效,不用重启,按一下试试就知道成没成。
command 名写错 = 快捷键彻底不响应
网上搜到的 delete_line、js_format 多数已过期。Sublime 不认猜测名,只认实测出来的命令标识符。
- 最常用方法:按
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"}
注意:delete_line 不是原生命令,直接写它不会触发任何行为;真正起作用的是 run_macro_file 加上对应 args。写错名,保存了也白搭。
覆盖 Ctrl+D、Ctrl+S 这类高频键前先想清楚后果
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"},默认的“多光标选词”功能就永久消失,且无法回滚。
想让 ctrl+d 在无选区时复制整行、有选区时仍保留多光标?必须拆成带 context 的两条规则:
[{
"keys": ["ctrl+d"],
"command": "duplicate_line",
"context": [{"key": "selection_empty", "operator": "equal", "operand": true}]
}, {
"keys": ["ctrl+d"],
"command": "find_under_expand",
"context": [{"key": "selection_empty", "operator": "equal", "operand": false}]
}]
context 条件是“且”关系;想表达“或”,只能拆成多条独立规则。修饰键顺序建议按惯例写 ctrl+alt+shift+super,避免匹配失败。
怎么让快捷键只在 Python 或 HTML 文件里生效
Sublime 的快捷键绑定默认是全局的,但实际按作用域(scope)生效。你不能靠文件后缀判断,得查当前文件的真实 scope。
打开一个 .py 文件,按 Ctrl+Shift+P → 输入 show_scope_name → 回车。状态栏会显示类似 source.python meta.function.python ——其中 source.python 就是你要用的 scope。
绑定时加 context 字段即可限定作用域:
[{
"keys": ["ctrl+alt+b"],
"command": "black",
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]
}]
多个作用域要分别写规则,不能用逗号分隔;text.html、source.css 同理。scope 写错,快捷键在对应文件里就完全不触发。
真正麻烦的不是写几行 JSON,而是 context 条件漏判、command 名过期、JSON 格式肉眼难查的标点错误——这些都会导致快捷键无声无息地失效,连调试入口都没有。


















