Sublime自定义快捷键必须编辑User.sublime-keymap文件,需严格遵循JSON格式、正确command名、合理context限定及规范修饰键顺序,否则静默失效。

Sublime 的快捷键不是在设置界面里点几下就能改的,所有自定义必须写进 User.sublime-keymap 文件,且格式错一个标点就完全失效——它不会报错,只会静默忽略。
怎么打开并编辑正确的 keymap 文件
别搜路径、别找文件夹、别改左侧那个 Default 文件。直接点菜单 Preferences → Key Bindings,你会看到左右两个面板:
- 左侧是只读的默认键位(
Default (Windows).sublime-keymap等),改了也没用,升级就丢 - 右侧是
User.sublime-keymap,所有自定义都写这里,保存即生效,不用重启 - 首次打开时右侧常为空,但你必须手动补上
[ ],让它成为合法 JSON 数组,比如:[{"keys": ["ctrl+alt+s"], "command": "save"}]
为什么写了没反应?90% 是 command 名错了
Sublime 不校验 command 字段是否存在,拼错、大小写不对、用过期名(如 js_format),它都一声不吭。真实可用的命令名只能实测获取:
- 按
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"} - 插件命令(如 ESLint、Black)必须查该插件最新文档或用命令面板实测,
format_code这类名字大概率已失效
怎么避免覆盖 Ctrl+D、Tab 这类高频键导致功能丢失
直接把 Ctrl+D 绑给 duplicate_line,你就永远失去多词选择能力。这不是非此即彼的事,靠 context 就能共存:
- 让
Ctrl+D只在无选区时复制整行:"context": [{"key": "selection_empty", "operator": "equal", "operand": true}] - 多个
context条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 想限定语言类型(比如只在 Python 里生效):
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}] - 修饰键顺序要规范:
ctrl+alt+shift+super,macOS 上Cmd必须写成super,不能写cmd
JSON 格式和参数传递的硬性细节
这个文件对语法极其敏感,一个中文引号、末尾多逗号、少个方括号,整条规则就废:
-
keys必须是小写字符串数组,用短横线连接:["ctrl+shift+k"]✅,["Ctrl+Shift+K"]❌ -
args必须是字典,嵌套在命令对象里:"command": "show_overlay", "args": {"overlay": "command_palette"} - 调用内置宏必须用
res://协议:"file": "res://Packages/Default/Delete Line.sublime-macro",不能写本地路径 - 所有标点必须英文半角,引号必须英文双引号,数组末尾不能有逗号
最易被忽略的是 context 的隐式限制:漏掉 "setting.is_widget": false,你的快捷键可能在命令面板里意外触发;没加 selector 限定,Tab 补全可能在注释行也执行。这些条件不是可选项,而是生效前提。











