最稳方法是用ctrl+shift+p查命令名;user.sublime-keymap需严格json格式;可用context实现快捷键共存;args必须字典嵌套,路径用res://协议;改完务必实测验证。

怎么找到命令名,而不是瞎猜
快捷键没反应,90% 是 command 写错了——不是拼错,是根本不存在或已改名。Sublime 不报错,只是静默忽略。
- 最稳方法:按
Ctrl+Shift+P打开命令面板,输入功能关键词(比如“delete line”),看到的完整条目就是真实command值,例如run_macro_file而不是delete_line - 进阶验证:按
Ctrl+`打开控制台,输入sublime.log_commands(True),然后手动点菜单里的“删除行”,控制台会打出类似command: run_macro_file {"file": "res://Packages/Default/Delete Line.sublime-macro"} - 别信旧教程里写的
js_format或beautify——插件一升级,命令名可能全换,必须实测
User.sublime-keymap 文件怎么写才不报错
右下角突然弹出红色提示?基本就是 JSON 格式崩了。这个文件看着简单,但标点容错率极低。
- 必须用英文半角符号:
[{ "keys": ["ctrl+alt+p"], "command": "show_overlay", "args": {"overlay": "command_palette"} }]—— 中文引号、多余逗号、漏掉方括号都会失效 - 哪怕只加一条规则,也得包在
[ ]里;多条规则之间用英文逗号分隔,末尾不能有逗号 - 首次编辑时右侧
User.sublime-keymap是空的,别直接贴代码进去就保存,先确认它是个合法 JSON 数组(即以[开头、]结尾)
想覆盖默认快捷键,但又不想丢功能
比如把 Ctrl+D 从“选词”改成“复制整行”,原功能就没了。这不是非此即彼的事,靠 context 就能共存。
- 加条件判断:只有光标没选中任何文本时才触发复制行,否则保留原
Ctrl+D行为:"context": [{"key": "selection_empty", "operator": "equal", "operand": true}] - 更精细控制:比如 Tab 键只在非注释行补全,就得用正则:
{"key": "preceding_text", "operator": "not_regex_contains", "operand": "^\s*//|^\s*#"} -
context是“且”关系,多个条件同时满足才执行;想实现“或”,只能拆成两条独立规则
带参数的命令怎么传 args
很多实用操作必须传 args,比如打开命令面板、跳转到函数列表、运行某个宏——没参数,命令根本不认识你要干什么。
-
args必须是字典,嵌套在命令对象里,不能平级写:"command": "show_overlay", "args": {"overlay": "goto", "text": "@"} - 路径类参数注意写法:调用内置宏要用
res://协议,例如"file": "res://Packages/Default/Delete Line.sublime-macro",别写成相对路径或本地绝对路径 - 不确定参数名?还是回到控制台日志法:执行一次目标操作,看它实际传了哪些
args,照抄最安全










