VSCode没有内置快捷键录制器,所谓“录制”实为捕获按键触发的真实command ID以用于复用、重绑定或排查冲突;需通过控制台日志、Inspect Editor Tokens and Scopes或--log=command参数精准获取命令及上下文条件。
VSCode 没有内置的“快捷键录制器”,所谓“录制”本质是捕获按键触发的命令 ID,不是录下操作序列再回放。你真正需要的,是快速定位某个快捷键背后调用的 command 名称,以便复用、重绑定或排查冲突。
VSCode 的命令 ID 命名并不总和 UI 文字一致(比如“格式化文档”对应 editor.action.formatDocument,而非 formatDocument 或 format),靠记忆或搜索容易漏掉大小写、点号或前缀。控制台输出的是真实触发的命令,零歧义。
e.command 字段就是你要的命令 ID,例如 editor.action.commentLine
e.command 是 undefined,说明该快捷键未绑定到任何命令(可能是被插件拦截、或触发了原生浏览器行为)⌥F12 触发的是 editor.action.goToReferences,但 Windows 默认是 Shift+F12 —— 控制台能立刻告诉你当前平台实际执行了什么Developer: Inspect Editor Tokens and Scopes 快速验证作用域条件很多自定义快捷键不生效,不是键位错了,而是 when 条件没满足。这个命令能在状态栏实时显示当前光标位置下的上下文条件,帮你确认 editorTextFocus、editorHasSelection 等是否为真。
editorTextFocus && editorLangId == 'javascript'
terminalFocus,这时你设的 when: "editorTextFocus" 就自然失效--log=command 日志里提取干净的命令流启动参数方式适合批量追踪,尤其当你想确认某次鼠标点击、右键菜单或命令面板输入到底触发了哪些命令时。日志比控制台更全,且不依赖手动监听。
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 错一个字符就无效when 条件更具体的那条,而不是文件里靠后的那条;如果你写了两条 ctrl+shift+p,一条无 when,一条带 when: "textInputFocus",后者只在输入框里生效,前者兜底真正难的不是找到命令名,而是理解命令何时可用、为何被跳过。盯着控制台看一次 e.command,比翻十遍文档更快;状态栏里那个实时刷新的 when 表达式,比硬背条件列表管用得多。