应通过Preferences → Key Bindings打开右侧User.sublime-keymap文件编辑,确保JSON格式合法(用方括号包裹、无中文标点、无多余逗号),command名须通过Ctrl+Shift+P查证或控制台log_commands获取,冲突时用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,快捷键就完全不执行。网上搜到的旧名(比如 js_format 或 delete_line)大概率已失效。当前版本中,“删除整行”实际走的是 run_macro_file + 路径参数,不是独立命令。
- 最稳方法:按
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"} - 别抄教程里的命令名——优先查你当前安装插件的文档,或打开左侧默认文件搜关键词定位原始定义
为什么加了快捷键却没反应
常见卡点就三个地方:
-
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": "selection_empty", "operator": "equal", "operand": true}]
}, {
"keys": ["ctrl+d"],
"command": "find_under_expand"
}]
这样:无选中时复制当前行,有选中时继续多词选择。注意 context 必须写在对应规则里,不能提出来共用;多个条件用数组拼接,顺序无关但逻辑要自洽。
真正容易被忽略的是 context 的 scope 判断粒度——比如想让快捷键只在注释里生效,{"key": "selector", "operand": "comment"} 不够准,得看 Show Scope Name 输出的具体值,可能是 comment.line.double-slash 或 comment.block,写错一个字符就不触发。


















