Sublime快捷键需在User.sublime-keymap(右侧)中以合法JSON数组格式编辑,命令名须实测获取,context可限定触发条件,禁用默认键用"unbound",新增命令面板入口需用show_overlay+args。

Preferences → Key Bindings 打开的是两个文件,右侧才是你该改的地方
Sublime 不提供“快捷键设置面板”这种图形化界面,所谓“打开设置面板”实际就是调出 Default.sublime-keymap(左侧,只读)和 User.sublime-keymap(右侧,可编辑)并排显示。你所有自定义都必须写在右侧文件里,改左侧或别的路径下的文件完全无效。
最稳打开方式是:Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Key Bindings 回车——别手动去 Packages/User/ 下找文件,容易进错目录或误改系统文件。
首次打开时右侧常为空,但必须保持合法 JSON 数组格式,哪怕只加一条规则也要用方括号包裹:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
保存后立即生效,无需重启、无需 reload。
command 名写错就静默失效,不报错也不提示
网上搜到的 delete_line、js_format 多数已过时,Sublime 不会报错,只会让你按了没反应。真实命令名得实测获取:
- 按
Ctrl+Shift+P,输入功能关键词(如“delete line”),看到的完整条目就是可用命令,例如run_macro_file - 或按
Ctrl+`打开控制台,执行sublime.log_commands(True),再手动点一次菜单操作(比如 Edit → Line → Delete Line),控制台会输出类似:command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"}
直接写 "command": "delete_line" 就是白忙一场。
覆盖 Ctrl+D、Ctrl+S 这类高频键前,先想清楚要不要彻底替换
把 Ctrl+D 改成 duplicate_line,原生“选中相同词”功能就没了。这不是增强,是置换。
想保留原功能又新增行为,得加 context 限定:
- 只在无选区时触发复制行:
"context": [{"key": "selection_empty", "operator": "equal", "operand": true}] - 只在 Python 文件中生效:
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}] - 禁用某个默认键,别留空或写
null,要显式写"command": "unbound"
多个 context 条件是“且”关系;想实现“或”,必须拆成两条独立规则。
绑定命令面板(Command Palette)不能改原生 Ctrl+Shift+P,但可以加新入口
Ctrl+Shift+P 是硬编码的,无法被常规 key binding 覆盖。但你可以新增一条规则让它响应其他组合键:
[{"keys": ["ctrl+alt+p"], "command": "show_overlay", "args": {"overlay": "command_palette"}}]
注意 show_overlay 必须带 args,否则弹出来的是文件切换器(goto)而不是命令面板。
这类绑定也受 context 影响——如果你加了 selector 限制,它可能在某些语法下压根不出现。真要全局可用,就别加 context。
复杂点在于:command 名、args 结构、context 逻辑、JSON 格式,四者只要一个出错,快捷键就彻底沉默。而 Sublime 从不告诉你哪错了。


















