VSCode 并没有内置所谓的“快捷键录制器”功能 —— 至少官方没有默认集成。你常听到的“录制”说法,其本质是捕获按键触发的命令 ID,而不是记录完整操作序列再回放。因此,你真正需要掌握的,是在几十个命令名称中快速定位某个快捷键背后调用的 command 名称,以便复用、重绑定或排查冲突。

为什么直接查看控制台比猜测命令名更靠谱
VSCode 的命令 ID 命名并不总是与 UI 文字保持一致。例如,“格式化文档”对应的命令是 editor.action.formatDocument,而不是 formatDocument 或 format。仅凭记忆或搜索很容易遗漏大小写、点号或前缀。而控制台输出的是真实触发的命令,零歧义,能帮你准确找到需要的 command 名称。
- 按下快捷键后,控制台中的
e.command字段就是你要的命令 ID,比如editor.action.commentLine - 如果
e.command显示为undefined,说明该快捷键未绑定到任何命令(可能是被插件拦截,或触发了原生浏览器行为) - macOS 上
⌥F12触发的是editor.action.goToReferences,而 Windows 默认对应Shift+F12—— 控制台能立刻告诉你当前平台实际执行了哪个命令
用 Inspect Editor Tokens and Scopes 快速验证作用域条件
很多自定义快捷键不生效,并非键位设置错误,而是 when 条件未满足。这个命令能在状态栏实时显示当前光标位置下的上下文条件,帮你确认 editorTextFocus、editorHasSelection 等条件是否为真,从而快速定位快捷键冲突或失效的根源。
- 启用后,将光标放在普通编辑器里,状态栏会显示类似
editorTextFocus && editorLangId == 'ja vascript'的信息 - 切换到终端面板,状态栏变为
terminalFocus,此时你设置的when: "editorTextFocus"自然失效 - 它不直接输出命令 ID,但能解释“为什么我按了 Ctrl+/ 却没有注释”——很可能光标当前在终端或搜索框里
从 --log=command 日志里提取干净的命令流
启动参数方式适合批量追踪,尤其当你想确认某次鼠标点击、右键菜单或命令面板输入到底触发了哪些命令时。日志比控制台更全面,且无需手动监听,能帮你高效梳理命令调用链路。
- 退出 VSCode 后运行
code --log=command,所有用户动作都会写入 DevTools Console,格式为[command] commandName (source: keybinding) - 日志中带有
(source: keybinding)的行,才是你按快捷键触发的;(source: menu)对应右键菜单,(source: commandPalette)对应命令面板 - 注意:日志不会显示
when条件的判断结果,只告诉你“最终执行了什么命令”。要检查条件是否满足,仍需借助Inspect Editor Tokens and Scopes
导入/导出时最容易忽略的三个细节
keybindings.json 看似简单,但粘贴后快捷键不生效,往往卡在以下几个关键点上:
key字段必须使用小写字母和连字符,Ctrl+Shift+L要写成"ctrl+shift+l"(Windows/Linux)或"cmd+shift+l"(macOS),大小写敏感command必须与控制台输出的完全一致,包括大小写、点号和空格 ——editor.action.formatDocument错一个字符就无效- 多个快捷键绑定同一组合键时,VSCode 优先匹配
when条件更具体的那条,而不是文件里靠后的那条;如果你写了两条ctrl+shift+p,一条无when,一条带when: "textInputFocus",后者只在输入框里生效,前者兜底
真正难的不是找到命令名,而是理解命令何时可用、为何被跳过。盯着控制台看一次 e.command,比翻十遍文档更快;状态栏里那个实时刷新的 when 表达式,比硬背条件列表管用得多。
