Sublime Text自定义快捷键需在Preferences → Key Bindings打开的右侧User.sublime-keymap中以合法JSON数组格式添加规则,command名须通过命令面板或控制台实测获取,保存后立即生效。

Sublime Text 的默认快捷键不能“修改”,只能覆盖——你在 User.sublime-keymap 里加一条新规则,它就生效,原键位自动失效;写错、冲突或 JSON 格式非法时,它会静默失败,不报错也不提示。
怎么打开并编辑正确的 User.sublime-keymap 文件
点菜单 Preferences → Key Bindings,会并排打开两个文件:左侧是只读的 Default (Windows).sublime-keymap(或对应系统名),右侧是你要编辑的 User.sublime-keymap。所有自定义都必须写在这里,改其他地方完全无效,还可能被下次更新覆盖。
首次打开时,右侧可能是空的或只有 []——这是合法的 JSON 数组,你往里面加对象就行。别手动改左侧文件,升级后会被覆盖,且可能引发解析错误。保存后立即生效,无需重启。
- 右下角弹出红色错误提示?多半是末尾多逗号、引号没闭合、用了中文标点
- 快捷键没反应?先确认是否真的写在右侧文件里,且保存成功
- 想恢复默认?清空右侧内容,但务必保留
[],否则 JSON 不合法
command 名怎么找才不会写错
命令名写错,快捷键就完全不执行。最稳的方式不是猜,而是实测:
- 按
Ctrl+Shift+P打开命令面板,输入功能关键词(如duplicate line),看到的命令名就是真实command值(例如duplicate_line) - 或者打开控制台
Ctrl+`,输入sublime.log_commands(True),然后手动执行一次目标操作(比如菜单里点“删除行”),控制台会打出完整命令和参数 - 别依赖记忆或网上搜到的旧命令——插件升级后命令名可能变,比如
js_format可能已废弃,换成eslint_fix
覆盖高频键(如 Ctrl+D、Ctrl+S)要注意什么
直接覆盖 ctrl+d 这类高频键风险高,容易破坏原有工作流。真要覆盖,得用 context 条件拆分逻辑,或显式禁用原行为:
- 想让
ctrl+d在无选区时复制整行、有选区时仍选词?得写两条规则,分别用"selection_empty": true和"selection_empty": false - 想彻底禁用某个默认键(如屏蔽
ctrl+alt+s防误触),写:{"keys": ["ctrl+alt+s"], "command": "unbound"} - 鼠标快捷键不能写在这里,需另建
Default.sublime-mousemap或User.sublime-mousemap
带参数和条件的高级绑定怎么写
很多实用功能需要传参或限定触发场景,比如让 Tab 键只在非注释行补全、让 Ctrl+P 默认搜函数而不是文件:
-
args是字典,必须嵌套在命令对象里,例如:{"keys": ["ctrl+p"], "command": "show_overlay", "args": {"overlay": "goto", "text": "@"}} -
context控制生效条件,常见判断项有:"selection_empty"、"preceding_text"、"auto_complete_visible" - 多个
context条件是“且”关系;想实现“或”,得拆成多条规则 - 正则匹配要用
"not_regex_contains"或"regex_contains",比如屏蔽注释行:{"key": "preceding_text", "operator": "not_regex_contains", "operand": "^\s*//|^\s*#"}
真正容易被忽略的是 context 的匹配时机和 operator 的语义——preceding_text 匹配的是光标前所有字符,不是当前行;not_regex_contains 是“不包含”,不是“不以…开头”。写错一个字符,整条规则就失效,而且不会报错。

















