sublime text 快捷键必须在 user.sublime-keymap 中以合法 json 数组格式添加新规则覆盖默认行为;通过 preferences → key bindings 打开右侧文件编辑,command 名须用 ctrl+shift+p 或控制台实测获取,高频键需用 context 限定或拆分规则避免冲突。

Sublime Text 的快捷键不能“修改默认配置”,只能靠在 User.sublime-keymap 里写新规则来覆盖——写对就生效,写错就静默失效,不报错也不提醒。
怎么打开并编辑正确的 keymap 文件
别搜路径、别找文件夹、别改左侧那个 Default 文件。直接点菜单 Preferences → Key Bindings,你会看到左右两个面板:
- 左侧是只读的默认键位(如
Default (Windows).sublime-keymap),改了也没用,升级就丢 - 右侧是可编辑的
User.sublime-keymap,所有自定义都写这里,保存即生效,不用重启
首次打开时右侧常为空,但你必须手动补上 [ ],让它成为合法 JSON 数组,比如:
[{"keys": ["ctrl+alt+s"],"command":"save"}]
少一个方括号、多一个逗号、混入中文引号,整条规则就废。
为什么写了没反应?90% 是 command 名错了
Sublime 不校验 command 字段是否存在,拼错、大小写不对、用过期名(如 js_format),它都一声不吭。真实可用的命令名只能实测获取:
- 按
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"}
插件命令(如 ESLint、Black)必须查该插件最新文档或用命令面板实测,format_code 这类名字大概率已失效。
怎么避免覆盖 Ctrl+D、Tab 这类高频键导致功能丢失
直接把 Ctrl+D 绑给 duplicate_line,你就永远失去多词选择能力。这不是非此即彼的事,靠 context 就能共存:
- 让
Ctrl+D只在无选区时复制整行:"context": [{"key":"selection_empty","operator":"equal","operand": true}] - 多个
context条件是“且”关系;想实现“或”,必须拆成两条独立规则 - 想限定语言类型(比如只在 Python 里生效):
"context": [{"key":"selector","operator":"equal","operand":"source.python"}]
修饰键顺序要规范:ctrl+alt+shift+super,macOS 上 Cmd 必须写成 super,不能写 cmd。
运行代码、格式化、终端这类功能没有内置 command
Sublime Text 里没有“运行”“格式化”“打开终端”这种内置命令,它们全靠插件提供,比如 Terminus、SublimeREPL、Build System。快捷键绑定必须对应具体插件的 command 名:
- 按
Ctrl+Shift+P搜索 “Terminus: Open Default Shell”,右边显示的terminus_open就是真实命令名 - 如果你用的是 Build System,命令名通常是
build,但必须配合args指定variant,例如:{"command": "build", "args": {"variant": "Run"}}(前提是你的 .sublime-build 文件里定义了名为Run的 variant) - 鼠标快捷键不走
User.sublime-keymap,得另建Default.sublime-mousemap文件
最易被忽略的其实是 context 和 args 的组合使用——光有 command 和 keys,往往只在部分场景下生效,而真正贴合个人习惯的快捷键,恰恰依赖这两者的精确限定。











