直接编辑keybindings.json才是最可控的自定义方式,图形界面仅适合试错;必须通过ctrl+shift+p输入“preferences: open keyboard shortcuts (json)”打开,添加含key、command及when字段的合法json对象,when写错或command不匹配会导致静默失效。

直接改 keybindings.json 是最可控的方式
图形界面(Ctrl+K Ctrl+S)适合试错,但真要绑定带条件、多命令或跨上下文的快捷键,必须编辑 keybindings.json。VSCode 不会自动帮你补全 when 表达式,也不会提示某个 command 是否支持当前上下文——这些都得你手动查、手动写。
打开方式:按 Ctrl+Shift+P → 输入 Preferences: Open Keyboard Shortcuts (JSON) → 回车。文件默认是空数组 [],所有自定义规则都往里塞对象。
-
key值必须用小写字母和连字符,比如"ctrl+alt+l"合法,"Ctrl+Alt+L"会失效 -
command必须和命令面板里显示的全名一致,比如"editor.action.formatDocument",少一个点或大小写错就静默失败 -
when字段不是可选的“锦上添花”,而是防止误触发的关键。不加when就等于全局生效,可能在终端里按Ctrl+S意外保存文件而不是暂停进程
when 条件写不对,快捷键就形同虚设
很多自定义快捷键“点了没反应”,八成是 when 条件没满足。VSCode 的上下文表达式不支持 JavaScript 语法,也不是正则,而是一套固定关键字 + 逻辑运算符的 DSL。
常见有效写法:
-
"editorTextFocus":仅当光标在编辑器文本区时生效(不是侧边栏、不是终端、不是搜索框) -
"resourceExtname == '.ts'":只对 TypeScript 文件生效,注意单引号和双等号 -
"editorTextFocus && !inDebugRepl":编辑器聚焦且不在调试控制台里 -
"explorerViewletVisible && !editorTextFocus":资源管理器打开且编辑器没焦点时才触发
错误示范:"editorFocus"(不存在)、"fileExt === 'js'"(用错运算符、关键字)、"textInputFocus && editorTextFocus"(两者互斥,永远为假)。
想一键跑任务?别绑 command,要绑 workbench.action.terminal.runActiveFile 这类代理命令
VSCode 本身没有“运行当前文件”这种通用命令。不同语言靠扩展提供执行能力,比如 Python 插件注册 python.execInTerminal,Node.js 靠 Code Runner 注册 code-runner.run。硬绑这些插件命令,换环境就挂。
更稳的方案是利用 VSCode 内置的终端控制命令:
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
-
"workbench.action.terminal.runSelectedText":运行选中的代码块(需先选中) -
"workbench.action.terminal.runActiveFile":运行当前活动文件(不管后缀,靠终端自己解释) -
"workbench.action.terminal.focus"+"workbench.action.terminal.sendSequence"组合:先聚焦终端,再发命令字符串,适合固定脚本
例如一键格式化 + 保存 + 运行:
[{
"key": "ctrl+alt+r",
"command": "workbench.action.terminal.runActiveFile",
"when": "editorTextFocus && resourceExtname == '.py'"
}]
注意:这个快捷键只在 Python 文件里生效,且依赖你已配置好能直接执行 .py 的终端环境(比如装了 Python 并加入 PATH)。
快捷键冲突不是“覆盖就行”,要看优先级和上下文权重
VSCode 不是简单“后加载覆盖前加载”。它按 when 表达式的具体程度排序:越精确的条件,优先级越高。比如:
-
"when": "editorTextFocus"是宽泛条件 -
"when": "editorTextFocus && resourceExtname == '.md'"更具体,会优先生效
所以如果你给 Markdown 文件单独绑了 Ctrl+B 加粗,又全局绑了 Ctrl+B 打开侧边栏,前者在 .md 文件里一定赢。
查冲突的方法只有两个:
- 在快捷键编辑器里搜那个键组合,看右边是否标红并提示“被占用”
- 按
Ctrl+Shift+P→ 运行Developer: Inspect Key Mappings,然后按你想查的组合键,弹窗里会列出所有匹配项及生效条件
别信“我删了旧规则它就没了”——有些默认绑定藏在系统层,必须显式用 "when": false 或覆盖 command 才能禁用。










