直接修改keybindings.json才能稳定映射调试快捷键,因GUI配置在涉及when条件或插件命令时易失效;需通过命令面板搜索并悬停查看或右键复制准确命令ID(如workbench.action.debug.continue),并注意when上下文约束与跨平台键位自动映射规则。

直接改 keybindings.json 才能稳定映射调试快捷键,GUI 界面点几下看似简单,但断点、继续、步进等操作一旦涉及 when 条件或插件命令,就大概率失效或行为错乱。
怎么拿到准确的调试命令 ID(比如“继续”“切换断点”)
VS Code 调试相关命令名和菜单文字不一致,不能靠猜。例如界面上写“继续”,实际命令是 workbench.action.debug.continue,不是 debug.continue 或 debug.resume。
- 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),输入“调试”或英文 “debug” 搜索 - 鼠标悬停在目标命令上,状态栏会显示完整
commandID;或者右键 → “Copy Command ID” - 想确认某快捷键当前触发了什么?按
Ctrl+Shift+P→ 执行Developer: Toggle Developer Tools,切到 Console 标签页,再按那个键,看日志里输出的command和source
为什么加了 F5 映射却没反应?常见 when 陷阱
调试快捷键几乎都依赖上下文。比如 workbench.action.debug.start 默认只在有调试配置(launch.json 存在)且编辑器聚焦时生效。漏写 when 或写得太窄,就会“按了没反应”,VS Code 也不报错。
- 想全局触发启动调试(比如从任意页面按
F5就跑默认配置):删掉when字段,或显式写"when": "" - 只想在 JS/TS 文件里按
Ctrl+Shift+D加断点?用"when": "editorTextFocus && editorLangId == 'javascript' || editorLangId == 'typescript'" - 禁用原生
F9(切换断点)?得匹配它的原始when:通常是editorTextFocus && !editorReadonly,否则你覆盖了也无效
跨平台调试快捷键怎么写才不翻车
Windows/Linux 用 ctrl,macOS 用 cmd,但 VS Code 会自动做映射——前提是别硬写死 cmd。同一份 keybindings.json 在三端都能用,只要修饰键用小写 ctrl。
- 正确:
"key": "ctrl+shift+b"(Windows/Linux 是 Ctrl+Shift+B,macOS 自动变成 Cmd+Shift+B) - 错误:
"key": "cmd+shift+b"(Windows 上完全不响应) - 真要区分系统?用
when表达式:"when": "isMac && editorTextFocus",但调试场景极少需要
覆盖高频调试键(如 F5、F9)前必须做的两件事
直接覆盖 F5 风险高,尤其协作或临时用别人机器时,容易卡在“为什么按 F5 没反应”。别只改绑定,得留退路。
- 顺手加一条备用键:比如把
workbench.action.debug.start绑到Ctrl+Alt+5,原F5保留不动 - 检查
launch.json是否真存在、是否被workbench.action.terminal.sendSequence类扩展干扰——有些终端插件会劫持F5发送字符 - 改完保存后不用重启,但建议关掉所有调试会话再试,避免旧 session 缓存状态影响判断
真正难的不是写对 JSON,而是判断哪个调试动作值得绑定——比如单步进入(workbench.action.debug.stepInto)高频但易误触,不如把“重启调试会话”(workbench.action.debug.restart)绑到顺手位置,它比反复点 UI 快得多,也更不容易打断思路。











