应通过preferences → key bindings打开右侧user.sublime-keymap文件编辑,确保json格式合法(方括号包裹、无中文标点、无多余逗号),command名须经ctrl+shift+p或控制台实测获取,冲突时用context区分场景。

怎么打开并编辑正确的 User.sublime-keymap 文件
所有自定义快捷键必须写在 User.sublime-keymap 里,改别的地方完全无效。点菜单 Preferences → Key Bindings,会并排打开两个文件:左边是只读的默认配置(如 Default (Windows).sublime-keymap),右边才是你要编辑的用户文件。
首次打开时右侧常为空,但必须保持合法 JSON 数组格式——哪怕只加一条规则,也得用方括号 [ ] 包裹:
[{"keys": ["ctrl+alt+s"], "command": "save"}]
保存后立即生效,不用重启、不用 reload。右下角弹红字?90% 是 JSON 格式问题:末尾多逗号、引号没闭合、用了中文标点、括号不匹配。
怎么拿到准确的 command 名,而不是靠猜
写错 command,快捷键就完全不执行。网上搜到的旧名(比如 delete_line 或 js_format)在当前版本基本已失效。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
- 最稳方法:按
Ctrl+Shift+P打开命令面板,输入功能关键词(如 “delete line”),看到的条目名就是真实command值(例如run_macro_file) - 更准方法:按
Ctrl+`打开控制台,输入sublime.log_commands(True),再手动执行一次目标操作(比如从菜单选“删除行”),控制台会输出类似:command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"} - 注意:
delete_line不是原生命令;“删除整行”实际走的是run_macro_file+args.file路径,漏掉args或路径写错,快捷键照样不响应
为什么加了快捷键却没反应
常见卡点就三个地方:
-
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 做条件判断:
[{
"keys": ["ctrl+d"],
"command": "duplicate_line",
"context": [
{ "key": "setting.is_widget", "operator": "equal", "operand": false },
{ "key": "selection_empty", "operator": "equal", "operand": true }
]
}]
这样只在无选区、非弹窗界面时触发复制行,不影响多光标选择。高频键覆盖不是“换一个命令”,而是“在合适场景下才换”。
真正容易被忽略的是:context 的逻辑是 AND 关系,少写一个条件,就可能让规则在不该生效的地方生效,或在该生效的地方静默失败。










