Sublime Text中快捷键与语法高亮完全分离,需通过context+selector限定作用域;例如ctrl+alt+f仅在Python文件生效,须写"operand":"source.python"并用Show Scope Name确认真实scope。

Sublime Text 里根本没有“语法绑定”这个东西
快捷键和语法高亮是两套完全分离的系统。你找不到“语法设置 → 快捷键”菜单,因为 Sublime Text 根本不提供这种入口。所谓“连续按键的语法绑定”,其实是误把 context 当成了语法专属通道——它只是个运行时条件判断器,不是绑定容器。
想让快捷键只在某种语法下生效,必须用 context + selector
比如你希望 ctrl+alt+f 只在 Python 文件里触发格式化,就得在 User.sublime-keymap 里写:
[{
"keys": ["ctrl+alt+f"],
"command": "auto_format",
"context": [
{"key": "selector", "operator": "equal", "operand": "source.python"}
]
}]
operand 值必须和当前文件真实 scope 完全一致,否则不触发。查法:按 Ctrl+Shift+P → 输入 Show Scope Name,看状态栏显示(例如 source.python meta.function.python)。别抄网上的 source.js 或 text.html,不同插件生成的 scope 差异很大。
多个语法共用一个快捷键?用 selector 的正则或列表匹配
如果想让 ctrl+alt+f 同时在 Python、JavaScript 和 Markdown 里生效,不能写多条规则,而要用单条规则配合 selector 的逻辑表达:
- 用正则:
{"key": "selector", "operator": "regex_contains", "operand": "source\.(python|javascript)|text\.markdown"} - 或用多值数组(Sublime 4.4+ 支持):
{"key": "selector", "operator": "equal", "operand": ["source.python", "source.js", "text.html.markdown"]}
注意:正则中反斜杠要双写;数组方式更直观但旧版本不兼容;两者都比堆砌多条规则更可靠,避免冲突和维护成本。
为什么按了没反应?三个地方最容易漏
常见静默失效原因就这三处,挨个检查比重写更快:
-
User.sublime-keymap文件不是合法 JSON 数组:缺外层[ ]、末尾多逗号、引号是中文的、括号不闭合——保存后右下角红字就是它 -
command名写错:比如写js_format,实际该用eslint_fix或run_macro_file加args.file;最稳办法是按Ctrl+Shift+P搜功能名,看命令面板里显示的完整条目 -
context匹配失败:比如你在 .md 文件里按快捷键,但operand写的是text.html;查 scope 要在目标文件里实时按Ctrl+Shift+P→Show Scope Name,不能凭文件后缀猜
scope 是动态的,同一文件里光标位置不同,scope 都可能变(比如进到注释块里变成 comment.line.double-slash),真要精细控制,得结合 selection_empty、preceding_text 等 context key 一起用。











