通过preferences → key bindings打开并编辑右侧user.sublime-keymap文件,必须保持合法json数组格式;command名须经ctrl+shift+p或控制台实测获取;覆盖高频键需加context限定或换组合键,保存后立即生效。

Sublime 的快捷键不是“改配置”,而是靠在 User.sublime-keymap 里加规则覆盖默认行为——写错就静默失效,不报错、不提醒,保存后立刻生效。
怎么打开并编辑正确的 User.sublime-keymap 文件
点菜单 Preferences → Key Bindings,会并排打开两个文件:左侧是只读的 Default (Windows).sublime-keymap(或对应系统名),右侧才是你要编辑的 User.sublime-keymap。所有自定义必须写在这里,改其他地方完全无效,而且下次升级可能直接覆盖。
首次打开时右侧常为空,但必须保持合法 JSON 数组格式——哪怕只加一条规则,也得用方括号 [ ] 包裹:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
- JSON 格式错是失败主因:末尾多逗号、引号没闭合、混用中文标点,Sublime 不提示,快捷键就是不响应
- 保存后立即生效,不用重启、不用 reload,改完就能试
- 右下角弹红字?90% 是 JSON 语法问题,不是命令名或作用域问题
怎么找对 command 名,而不是靠猜
command 写错,快捷键就彻底不触发。网上搜到的旧教程常写 js_format 或 delete_line,但这些早已被插件更新淘汰或根本不是原生命令。
最稳方法:Ctrl+Shift+P 打开命令面板,输入功能关键词(如 “delete line”),看到的完整条目名就是真实 command 值,例如 run_macro_file 而不是 delete_line。
备用验证法:Ctrl+` 打开控制台,输入 sublime.log_commands(True),再手动点一次菜单里的目标操作(比如 Edit → Line → Delete Line),控制台会打出类似:
command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"}
- 像“删除整行”这种功能,原生不叫
delete_line,而是run_macro_file加args - 插件命令名随版本变化,必须以当前控制台日志为准,不能凭记忆或旧文档填
- 参数
args和上下文context必须作为同级字段,跟keys和command并列,结构错一点就失效
怎么让快捷键只在 Python 或 HTML 文件里生效
Sublime 的快捷键绑定是按作用域(scope)生效的,不是全局统一的。直接改 Default (Windows).sublime-keymap,大概率没反应。
先查当前文件的作用域:Ctrl+Shift+P → 输入 show_scope_name 回车,状态栏会显示类似 source.python meta.function.python ——最前面的 source.python 就是你需要的 context selector。
- 常见作用域:
source.python(Python)、text.html.basic(HTML)、source.json(JSON)、text.plain(纯文本) - 加
context字段限定作用域,例如只在 Python 文件中插入print():
[
{
"keys": ["ctrl+shift+p"],
"command": "insert_snippet",
"args": {"contents": "print(${1:})"},
"context": [
{"key": "selector", "operator": "equal", "operand": "source.python"}
]
}
]
-
context多条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 鼠标快捷键要单独写进
Default.sublime-mousemap,不能塞进User.sublime-keymap
怎么安全覆盖 Ctrl+D、Ctrl+S 这类高频键
直接覆盖 Ctrl+D(默认“选择相同词”)为 duplicate_line,原功能就彻底没了——这不是“改得更顺”,而是“删掉一个常用功能换另一个”。
真要复用键位,必须加 context 限定触发条件。例如让 Ctrl+D 只在无选区时复制行:
"context": [{"key": "selection_empty", "operator": "equal", "operand": true}]
- 想禁用某个默认键,别留空或写
null,要显式写"command": "unbound" - 修饰键顺序有影响:
["ctrl+shift+f"]和["shift+ctrl+f"]多数情况一样,但 Sublime 内部按顺序匹配,建议按惯例写ctrl+alt+shift+super - 某些 Windows 输入法会吞掉
Ctrl+Alt组合,优先换用Ctrl+Shift类组合键更稳妥
context 和 args 的嵌套层级、字段位置、标点符号,差一格就失效;JSON 里多一个空格、少一个引号,快捷键就静默挂掉——它不会告诉你哪里错了,只会让你反复怀疑是不是 command 名不对。











