应通过命令面板(Ctrl+Shift+P → “Preferences: Key Bindings”)打开右侧可编辑的User.sublime-keymap文件,该文件必须为合法JSON数组格式,保存后即时生效;keys键名须全小写,command值需实测获取,覆盖高频键需用context区分场景,args和context须与keys、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。右下角弹红字?90% 是 JSON 错:末尾多逗号、引号没闭合、混入中文标点。
keys 和 command 字段怎么写才不静默失效
写错一个字符,快捷键就彻底“哑火”,Sublime 不报错也不提示。
-
keys里的键名必须全小写:"ctrl+d"✅,"Ctrl+D"或"CTRL+D"❌ - Windows 用户注意:
super指 Win 键;macOS 才对应 Cmd 键;Linux 下super通常也是 Win 键 -
command名不能靠猜。网上搜到的delete_line、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"}
注意:delete_line 不是原生命令,它由 run_macro_file + args.file 组合实现;漏掉 args 或路径写错,快捷键照样不触发。
怎么安全覆盖 Ctrl+D 这类高频键
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"} 看似简单,结果往往是:要么没反应,要么原功能(多光标选词)彻底消失且无法恢复。
Sublime 不提供“快捷键优先级回滚”,你写的规则一旦生效,原绑定就被不可逆覆盖。
真要共存,必须拆成两条带 context 的规则:
[{"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}]}]
要点:
-
context多条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 禁用默认键不能留空或写
null,要显式写"command": "unbound" - 修饰键顺序建议按惯例写:
ctrl+alt+shift+super,避免shift+ctrl+f这类非常规写法引发匹配不稳定
args 和 context 字段为什么总出错
args 和 context 不是可有可无的装饰,它们必须作为同级字段,跟 keys 和 command 并列,且嵌套结构不能错。
常见翻车点:
- 把
args写进command字符串里:"command": "run_macro_file {...}"❌ -
context写成对象而非数组:"context": {...}❌,正确是"context": [{...}] - 路径里漏掉
res://前缀:"file": "Packages/Default/Delete Line.sublime-macro"❌,必须是"file": "res://Packages/Default/Delete Line.sublime-macro" - scope 判断写错语法:
"key": "selector"后面跟字符串,不是正则表达式,别加/^source\.python$/这种写法
最麻烦的其实是 scope 和 selection 状态的组合判断——比如“只在 Python 文件且有选区时触发”,稍一疏忽就变成整条规则静默失效,而你根本看不出哪错了。


















