必须通过ctrl+shift+p(macos为cmd+shift+p)输入preferences: key bindings打开,右侧可编辑面板即user.sublime-keymap,需以合法json数组格式编写,command名须经命令面板或控制台实测获取,保存后立即生效。

怎么打开正确的 User.sublime-keymap 文件
别去 Packages/User/ 目录下手动找文件,也别改左侧只读的 Default (Windows).sublime-keymap。唯一可靠路径是:按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P)→ 输入 Preferences: Key Bindings → 回车。右侧那个可编辑面板就是你要写的 User.sublime-keymap。
首次打开常为空,但必须是合法 JSON 数组——哪怕只加一条规则,也得用方括号 [ ] 包裹。写错格式(比如末尾多逗号、引号没闭合、混入中文标点),快捷键就静默失效,Sublime 连红字提示都不给。
command 名必须实测,不能猜也不能抄旧资料
delete_line、js_format 这类名字网上很常见,但 Sublime 不认它们。真正起作用的是 run_macro_file 加上对应 args,例如删除整行实际是:
[{
"keys": ["ctrl+shift+k"],
"command": "run_macro_file",
"args": {"file": "res://Packages/Default/Delete Line.sublime-macro"}
}]
获取真实 command 的两种稳当方式:
- 按
Ctrl+Shift+P,输入功能关键词(如 “delete line”),看到的完整条目就是真实command值 - 按
Ctrl+`打开控制台,输入sublime.log_commands(True),再手动执行一次目标操作(比如菜单里点 “Edit → Line → Delete Line”),控制台会输出类似command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"}
想限定快捷键只在 Python 或 HTML 里生效?靠 context
Sublime 的快捷键默认是全局的,但很多操作只该在特定语法下触发。比如你希望 Ctrl+Alt+L 只在 Python 文件里调用代码格式化插件,就得加 context:
[{
"keys": ["ctrl+alt+l"],
"command": "python_format",
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]
}]
怎么知道当前文件的作用域?打开一个 .py 文件,按 Ctrl+Shift+P → 输入 show_scope_name → 回车,状态栏会显示类似 source.python meta.function.python,其中 source.python 就是你要用的 selector。
注意:context 是“且”关系;想表达“或”,只能拆成多条独立规则。
覆盖 Ctrl+D、Ctrl+S 这类高频键前,先确认是否真要禁用原功能
直接写 {"keys": ["ctrl+d"], "command": "duplicate_line"},默认的“多光标选词”就永久消失,且无法回滚。
如果想要更智能的行为(比如无选区时复制整行、有选区时仍保留多光标),必须拆成带 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}]
}]
修饰键顺序建议按惯例写 ctrl+alt+shift+super,避免匹配失败;保存后立即生效,按一下试试就知道成没成。
最容易被忽略的是 context 的 selector 写法和 command 名的时效性——插件更新后,htmlprettify 可能已变成 html_prettify,不重查就会失效。











