最稳方式是按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Preferences: Key Bindings回车,会并排打开左侧只读默认配置和右侧可编辑的User.sublime-keymap文件,所有自定义必须写在右侧,且保持合法JSON数组格式,保存即生效。

怎么打开并编辑正确的 User.sublime-keymap 文件
所有自定义快捷键必须写在 User.sublime-keymap 里,改别的地方完全无效。最稳方式是按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Key Bindings 回车——会并排打开两个文件:左侧只读,默认配置;右侧可编辑,才是你要改的 User.sublime-keymap。
首次打开时右侧常为空,但必须是合法 JSON 数组格式:哪怕只加一条规则,也得用方括号 [ ] 包裹。例如:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
保存后立即生效,不用重启、不用 reload。右下角弹红字?90% 是 JSON 错:末尾多逗号、引号没闭合、用了中文标点、括号不匹配,或者 keys 里写了 "Ctrl+D"(正确是小写 "ctrl+d")。
怎么拿到准确的 command 名,而不是靠猜
写错 command 字段,快捷键就静默失效,不报错也不提示。网上搜到的 delete_line、js_format 等旧名基本已失效,Sublime 不会校验命令是否存在。
- 最稳方法:按
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"} - 带参数的命令(如格式化)必须传
args,且结构要嵌套正确,不能漏掉"file"字段
为什么加了快捷键却没反应
常见卡点就三个地方:
-
JSON格式错误:保存后右下角有红字提示,但很多人忽略它 - 被更高优先级规则拦截:Sublime 从左到右加载,左侧默认文件里已有
"keys": ["f5"]绑定到build,你在右侧也写"keys": ["f5"]却没加context,那你的规则会被默认规则覆盖 -
context限制太严:比如写了{"key": "selector", "operand": "source.python"},但你在 Markdown 文件里按快捷键,自然不触发——查当前语法按Ctrl+Shift+P→Show Scope Name看实际 scope 值
怎么安全覆盖 Ctrl+D 这类高频键
直接把 Ctrl+D 改成 duplicate_line,你就再也无法连续选中相同文本了。这不是增强,是置换,而且不可逆。
- 想保留原功能又新增行为,必须用
context做条件判断:
只在无选区时触发复制行:{"key": "selection_empty", "operator": "equal", "operand": true}
只在 Python 文件中生效:{"key": "selector", "operator": "equal", "operand": "source.python"} - 多个
context条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 禁用某个默认键,别留空或写
null,要显式写"command": "unbound"
真正难的不是写几行 JSON,而是搞清当前上下文——scope、selection 状态、插件是否已加载,这些稍有偏差,快捷键就停在半路不动。调试时别跳过 Show Scope Name 和 log_commands 这两步。


















