通过Preferences → Key Bindings打开右侧User.sublime-keymap文件,以合法JSON数组格式添加含"keys"和"command"字段的对象,保存即生效;写错JSON、command名或作用域限定会导致静默失效。

改完保存就生效,不用重启、不用 reload、不弹提示——但写错会静默失效,连报错都不给。
怎么打开并编辑正确的 User.sublime-keymap 文件
点菜单 Preferences → Key Bindings,会并排打开两个文件:左边是只读的 Default (Windows).sublime-keymap(或对应系统名),右边才是你要编辑的 User.sublime-keymap。所有自定义必须写在这里,改其他地方完全无效,升级还可能被覆盖。
首次打开时右侧常为空,但必须写成合法 JSON 数组格式——哪怕只加一条规则,也要用方括号 [ ] 包裹,例如:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
常见错误:
- 忘记外层
[ ],导致整个配置不被识别 - 末尾多逗号(JSON 不允许)
- 用了中文引号或冒号
- 把规则直接塞进默认文件里,改了也没反应
command 名写错或不存在,快捷键就等于没绑
Sublime 不校验 command 字段是否真实存在,拼错、大小写不对、插件未安装,都会让快捷键静默失效。
确认方法:
- 按
Ctrl+Shift+P打开命令面板,输入你想绑定的命令名(比如format_code),看是否能搜到完整匹配项 - 在控制台执行
sublime.log_commands(True),再手动点一次菜单或用默认快捷键触发目标操作,控制台会打印出实际调用的command名和args - 插件自带的命令通常带前缀,比如
emerald_format或jsprettier,不是通用名
快捷键冲突或作用域不匹配,按了没反应
Sublime 的快捷键默认是全局生效的,但很多命令(尤其是插件命令)只在特定作用域下才可用。比如 reindent 在纯文本文件里按了没反应,是因为它只响应 source.python 或 source.js 这类作用域。
查当前作用域:
- 打开一个代码文件(如
.py),按Ctrl+Shift+P,输入show_scope_name并回车 - 状态栏显示类似
source.python meta.function.python,其中source.python就是最常用的作用域标识
绑定作用域限定规则示例(只在 Python 文件中生效):
[{
"keys": ["ctrl+alt+l"],
"command": "reindent",
"context": [
{ "key": "selector", "operator": "equal", "operand": "source.python" }
]
}]
注意:context 是数组,不是对象;operand 值要严格匹配作用域字符串,大小写敏感。
为什么改了保存却没反应?优先检查这三处
快捷键“看起来没生效”,90% 是以下三个原因叠加:
- JSON 格式非法:右下角出现红色报错提示(如
Invalid JSON),但很多人忽略它 - 组合键被系统或其它软件占用:比如
Ctrl+Alt+T在 Ubuntu 下默认唤起终端,Sublime 拿不到事件 - 键位本身有硬件/输入法干扰:数字小键盘的
+和主键盘区的=在 Sublime 里算不同键;中文输入法开启时,某些快捷键会直接被拦截
真正容易被忽略的是作用域绑定和输入法状态——尤其在调试 Python 或前端项目时,你以为按的是 Ctrl+Shift+P,其实输入法正处在中文模式,那个 P 根本没传给 Sublime。











