sublime text 菜单功能由底层命令驱动,需通过命令面板或控制台获取准确 command 名;user.sublime-keymap 必须为合法 json 数组,常见失效原因包括 json 语法错误、command 名错误或 context 限制过严。

Sublime Text 的菜单栏功能(比如 File → Save、Edit → Line → Duplicate Line)本身没有独立的“菜单快捷键”概念——它靠的是底层命令(command)驱动,而这些命令早已绑定在快捷键系统里。你不需要“映射菜单项”,只需要把对应命令绑到你喜欢的键上即可。
怎么找到菜单功能对应的真实 command 名
菜单栏点击的动作,背后都是 Sublime 内部命令。直接猜或抄旧教程里的名字(比如 delete_line)大概率失败。
- 按
Ctrl+Shift+P打开命令面板,输入菜单里看到的关键词,比如 “duplicate line”、“save all”、“toggle comment”,看到的完整条目名就是你要的command - 更准的方法:按
Ctrl+`打开控制台,输入sublime.log_commands(True),然后手动点一次菜单项(例如Edit → Line → Duplicate Line),控制台会输出类似:command: duplicate_line - 注意:有些菜单项是宏(macro),比如 “Delete Line”,实际走的是
run_macro_file+args.file路径,不能只写"command": "delete_line"
User.sublime-keymap 文件必须是合法 JSON 数组
Preferences → Key Bindings 打开后,右侧是 User.sublime-keymap。它不是普通文本,而是 JSON 数组,哪怕只加一条规则也得包在 [ ] 里。
- 正确格式:
[{"keys": ["ctrl+alt+s"], "command": "save"}] - 常见错误:末尾多逗号、用中文引号、漏掉方括号、混入注释(JSON 不支持
//或/* */) - 保存后右下角弹红字?基本就是 JSON 语法崩了,别跳过这个提示
- 别改左侧 Default 文件——改了也没用,重启或升级就还原
为什么 Ctrl+D、F5 这类键绑了也不生效
高频键被拦截或覆盖失败,通常不是命令写错,而是作用域或优先级问题。
- Sublime 按顺序加载键位:先 Default,再 User。如果 Default 里已有
"keys": ["f5"]绑定到build,而你的 User 规则没加context,那它会被默认规则盖掉 - 想让快捷键只在 Python 文件生效?查当前 scope:按
Ctrl+Shift+P输入show_scope_name,看到source.python后,在规则里加"context"字段 - 想保留 Ctrl+D 的原功能(多光标选词),又想让它在无选区时复制行?必须写带条件的 context,比如判断
"key": "selection_empty",而不是简单覆盖 - 禁用某个默认行为,不能删 Default 条目,得在 User 里显式写
"command": "unbound"
真正卡住人的地方,从来不是“怎么加一条快捷键”,而是“为什么加了没反应”——90% 出在 JSON 格式、command 名不匹配、或 context 限制太死。动手前先用控制台 log 一下命令,比反复试错快得多。











