正确方法是通过Ctrl+Shift+P输入Preferences: Key Bindings打开,编辑右侧User.sublime-keymap文件,必须用合法JSON数组格式(如[{"keys":["ctrl+alt+d"],"command":"duplicate_line"}]),保存即生效;command名须通过命令面板或控制台实测获取,context用于精准限定作用域。

直接改 User.sublime-keymap 文件,写对 JSON 格式、用对 command 名,保存即生效——错一个逗号、大小写不对、command 拼错,快捷键就完全静默失效,不报错也不提醒。
怎么打开并编辑正确的 User.sublime-keymap 文件
别手动去 Packages/User/ 目录下找文件,也别点左侧只读的 Default (Windows).sublime-keymap。唯一可靠路径是:Ctrl+Shift+P(macOS 是 Cmd+Shift+P)→ 输入 Preferences: Key Bindings → 回车。右侧那个可编辑面板就是你要写的 User.sublime-keymap。
首次打开常为空,但必须是合法 JSON 数组格式——哪怕只加一条规则,也得用方括号 [ ] 包裹:
[{"keys": ["ctrl+alt+d"], "command": "duplicate_line"}]
保存后立即生效,不用重启、不用 reload。右下角弹红字?八成是 JSON 错:逗号多写、引号没闭合、混入中文标点。
command 名必须实测获取,不能靠猜或搜旧教程
网上常见的 delete_line、js_format 等名字在当前版本(2026 年中)基本已失效。写错就等于没配。
- 最稳方法一:按
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.file 路径实现。漏掉 args 或路径写错,快捷键照样不响应。
覆盖 ctrl+d、ctrl+s 这类高频键前先想清楚后果
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"},多光标选词功能就彻底消失,且无法自动回退——Sublime 不提供快捷键优先级回滚机制。
- 优先换组合键:用
["ctrl+alt+d"]或["ctrl+shift+delete"],避开系统级劫持(某些 Windows 输入法会吃掉Ctrl+Alt) - 真要复用原键,必须加
context区分场景。例如让ctrl+d在无选区时复制整行、有选区时仍执行多光标扩展:
[
{
"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}]
}
]
禁用默认键必须显式写 "command": "unbound",不能只删掉默认配置,也不能留空或写 null。
作用域绑定(context)不是可选项,而是常见需求的必要条件
快捷键默认是全局生效的,但很多命令只应在特定语言或上下文中触发。比如“格式化 Python 代码”快捷键,在 HTML 文件里按了不该起作用。
查当前作用域的方法:Ctrl+Shift+P → 输入 show_scope_name → 回车,状态栏会显示类似 source.python 的字符串。把这个值放进 context 就能限定作用域:
{
"keys": ["ctrl+alt+l"],
"command": "format_code",
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]
}
多个 context 条件是“且”关系;想表达“或”,必须拆成两条独立规则。这点容易被忽略,但一旦漏掉,快捷键就在该生效的地方完全失灵。


















