sublime text快捷键只能通过user.sublime-keymap覆盖,默认文件只读且升级清空;没反应主因是json格式错误、command名不实测、插件冲突或context限制,保存即生效但静默失效。

直接在 User.sublime-keymap 里写新规则就能覆盖,默认绑定不支持修改,只支持后加载覆盖。
为什么改了 User.sublime-keymap 还是没反应
Sublime 的快捷键加载顺序是:Default (OS).sublime-keymap → 插件自带的 Default.sublime-keymap → User.sublime-keymap。后加载的静默覆盖前一个,不报错也不提示。
- 你在
User.sublime-keymap里写的["ctrl+/"],可能被Packages/Emmet/Default.sublime-keymap里同一条先占了——它比你早加载,你的根本没机会执行 - 打开
Preferences → Browse Packages,进每个插件目录搜"keys"字段,尤其盯紧Vintage、Emmet、Origami - 临时验证:命令行运行
subl --safe-mode,如果这时快捷键恢复,就说明冲突来自插件,不是你写错了
怎么写才真正生效(JSON 格式雷区)
User.sublime-keymap 是纯 JSON 数组,错一个标点整份配置就静默失效,右下角红字一闪而过,极易忽略。
- 所有键名和字符串值必须用英文双引号,
"keys"不是keys,"toggle_comment"不是toggle_comments - 数组结尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//或/* */注释;要临时禁用某条,删整行,或改成"command": "not_a_real_command" - 文件必须以
[开头、]结尾,哪怕空着也得是[]
Esc 键失效不能靠 keymap 修复
escape 键关命令面板、搜索框、替换栏是 Sublime 内核硬编码行为,完全不走 .sublime-keymap 流程。
- 你在
User.sublime-keymap里加{"keys": ["escape"], "command": "hide_panel"}不仅无效,还会干扰原生逻辑 - Esc 失效时,先运行
subl --safe-mode:若恢复,说明是插件劫持(Vintage默认拦截 Esc 进入普通模式,Origami有close_on_escape选项) - macOS 下还可能是系统设置里没勾选「使用 F1、F2 等键作为标准功能键」,导致键盘固件吞掉 Esc 信号
Mac 上 Cmd+Shift+P 被 Spotlight 占用怎么办
macOS 全局快捷键优先级高于 Sublime,Cmd+Shift+P 被 Spotlight 拦截是正常现象,别关 Spotlight,换组合更稳妥。
- 在
User.sublime-keymap里加一条:{"keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"}} - 别删默认的
Cmd+Shift+P绑定,某些插件(如Package Control)内部调用依赖它 - 其他安全替代组合:
cmd+alt+p、ctrl+cmd+p,避开系统常用热键区
最常被忽略的是按键根本没进 Sublime——sublime.log_input(True) 控制台无输出,就说明问题在系统层,再怎么调 User.sublime-keymap 都是白忙活。











