Sublime Text 的快捷键只能定义在 User.sublime-keymap 文件中,语法设置与快捷键无关;需用 context 中的 selector 限定作用范围,如 "source.python",并通过 Show Scope Name 查准 scope。

不能在“语法设置”里自定义快捷键——快捷键绑定和语法设置是两个完全独立的系统,混在一起改只会失效或报错。
Sublime Text 的快捷键必须写在 User.sublime-keymap
所有快捷键规则只能放在 User.sublime-keymap 文件中,通过 Preferences → Key Bindings 打开(右侧可编辑面板)。这个文件是纯 JSON 数组格式,和语法高亮、.sublime-syntax 或 Preferences → Settings 里的 settings 对象毫无关系。
- 语法设置(如
source.python)只能用在快捷键的context字段里做条件限制,不能用来“存快捷键” - 你找不到“语法设置 → 快捷键”这类菜单,因为根本不存在
- 手动去
Packages/User/目录下新建或修改Python.sublime-keymap等文件,Sublime 不会加载——它只认User.sublime-keymap和Default.sublime-keymap
想让快捷键只在某种语法下生效,得用 context 限定
比如“只在 Python 文件里按 ctrl+alt+f 格式化代码”,不能靠切换语法设置,而是在 User.sublime-keymap 里加 context:
[{
"keys": ["ctrl+alt+f"],
"command": "auto_format",
"context": [
{"key": "selector", "operator": "equal", "operand": "source.python"}
]
}]
-
selector值要和当前文件实际 scope 一致,查法:按Ctrl+Shift+P→ 输入Show Scope Name,看底部状态栏显示的完整 scope(如source.python meta.function.python) - 多个语法要同时支持?不能写
"operand": "source.python | source.js",得拆成两条规则,每条对应一个selector -
context是“且”关系:如果同时加了selection_empty和selector,那必须“没选中文本 + 是 Python 文件”两个条件都满足才触发
常见错误:把语法相关配置误当快捷键入口
以下操作全是无效的:
- 在
Preferences → Settings – Syntax Specific里写"keys"或"command"字段 - 在
Python.sublime-settings文件里添加快捷键 JSON - 以为 “
Ctrl+Shift+P → Set Syntax: Python” 后就能自动激活某套快捷键——不会,语法切换不触发键位重载 - 把
scope当成命令名,比如写"command": "source.python"—— 这不是命令,Sublime 会静默忽略
真正起作用的永远只有 User.sublime-keymap 里的 JSON 规则,而 context 是唯一能和语法挂钩的桥梁。漏掉 context 或写错 scope,就等于白配;写对了但放错文件,也一样没反应——这两点最容易被忽略。


















