sublime自定义快捷键必须在preferences → key bindings打开的右侧user.sublime-keymap中以合法json数组格式添加规则,command名须通过ctrl+shift+p或控制台实测获取,context用于精准限定作用域,保存即生效。

直接改 User.sublime-keymap 文件,不是“修改默认配置”,而是用新规则覆盖——写对就生效,写错就静默失效,连错误提示都不给。
怎么打开并编辑正确的 User.sublime-keymap 文件
别手动去 Packages/User/ 目录下找,也别点左文件去改默认配置。唯一稳的路径是:
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Preferences: Key Bindings,回车 - 右侧那个可编辑的面板就是你要的
User.sublime-keymap - 首次打开常为空,但必须是合法 JSON 数组:哪怕只加一条规则,也得用方括号
[ ]包裹,例如:[{"keys": ["ctrl+alt+s"], "command": "save"}] - 保存后立即生效,不用重启、不用 reload;右下角弹红字?90% 是 JSON 格式问题:末尾多逗号、引号没闭合、混入中文标点、括号不匹配
怎么拿到准确的 command 名,而不是靠猜
写错 command,快捷键就彻底不执行。网上搜到的 delete_line、js_format 等名字,大概率已过期或仅存在于旧插件中。
- 最稳方法:按
Ctrl+Shift+P打开命令面板,输入功能关键词(如 “delete line” 或 “format code”),看到的完整条目名就是真实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"} - 注意:
args里的路径不能省,否则run_macro_file会找不到宏文件
为什么 Ctrl+D、Tab 这类键一改就出事
直接把 ctrl+d 绑定为 duplicate_line,你就永远失去了多光标选词能力——Sublime 不提供“恢复原绑定”的按钮,覆盖即永久生效。
- 优先换组合键:用
ctrl+alt+d或ctrl+shift+d,避开系统级劫持(某些 Windows 输入法会吞掉ctrl+alt) - 真要复用原键,必须加
context拆逻辑:比如让ctrl+d在无选区时复制整行,有选区时仍执行原find_under_expand - 禁用某个默认键,不能删规则或留空
command,必须显式写:"command": "unbound"
作用域(scope)不匹配,快捷键就不触发
Sublime 的快捷键默认是全局生效的,但很多命令(比如格式化、跳转)只在特定语法下才可用。你按了没反应,很可能是因为当前文件的作用域不匹配。
- 查当前作用域:打开任意代码文件(如
main.py),按Ctrl+Shift+P输入show_scope_name回车,状态栏显示类似source.python meta.function.python——前面的source.python就是关键作用域 - 限定作用域生效:在快捷键规则里加
context,例如只在 Python 文件里触发格式化:{"keys": ["ctrl+alt+l"], "command": "eslint_fix", "context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]} - 多个
context条件是“且”关系;想实现“或”,得拆成两条独立规则
最易被忽略的其实是 context 和 args 的配合——比如 run_macro_file 必须带 args.file,而 show_overlay 必须带 args.overlay,漏掉任何一个字段,命令就静默失败。











