应通过ctrl+shift+p(win/linux)或cmd+shift+p(macos)输入“preferences: key bindings”打开右侧可编辑的user.sublime-keymap文件,确保json格式合法、command名准确、context条件精确,并用show scope name确认selector值。

怎么打开并编辑正确的 User.sublime-keymap 文件
所有自定义快捷键必须写在 User.sublime-keymap 里,改别的路径或文件名(比如手动去 Packages/User/ 下找、改 Default.sublime-keymap)完全无效,还可能被下次更新覆盖。最稳方式是:Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Key Bindings 回车——右侧那个可编辑的面板才是你要写的文件。
首次打开时右侧常为空,但必须是合法 JSON 数组格式:哪怕只加一条规则,也得用方括号 [ ] 包裹,例如:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
保存后立即生效,无需重启、无需 reload。
command 名写错就彻底静默失效
Sublime 不报错、不提示、不 fallback,按了没反应就是命令名错了。网上搜到的 delete_line、js_format、format_code 等多数已过时或依赖插件,不能直接抄。
- 最准方法:按
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"} - 注意大小写和拼写:
duplicate_line是对的,DuplicateLine或duplicateLine就不行
覆盖 Ctrl+D、Ctrl+S 这类高频键前必须加 context
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"} 看似简单,实际会永久禁用原生“选中相同词”功能,且无法恢复。
想保留原行为又新增逻辑,得用 context 做条件区分:
- 只在无选区时复制整行:
"context": [{"key": "selection_empty", "operator": "equal", "operand": true}] - 只在 Python 文件中触发格式化:
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}] - 多个条件是“且”关系;想实现“或”,必须拆成两条独立规则
禁用某个默认键,别留空或写 null,要显式写 "command": "unbound"。
JSON 格式错误是 90% 的“没反应”原因
右下角弹红字?基本就是这里出问题。Sublime 对 JSON 极其敏感,常见错误包括:
- 末尾多逗号(如数组最后一项后跟了
,) - 用了中文标点(引号、冒号、括号)
- 引号没闭合、括号不匹配
-
keys里的键名写了大写(如"Ctrl+D"应为"ctrl+d") - Windows 用户误用
super指代 Ctrl 键(super在 Windows 是 Win 键,不是 Ctrl)
真正容易被忽略的是:context 中的 selector 值必须和当前文件的实际语法 scope 完全一致——按 Ctrl+Shift+P 输入 Show Scope Name 才能确认,光看右下角显示的 “Python” 不够精确。











