when子句用于控制VS Code中快捷键的生效时机,其基本结构包含key、command和when条件,如"editorTextFocus && !editorReadonly"表示仅在编辑器聚焦且非只读时生效;支持常见上下文变量如editorTextFocus、textInputFocus及逻辑操作符&&、||、!;高级用法包括终端中限定Ctrl+C复制、区分补全建议与换行的Enter行为、禁用特定语言(如Markdown)的Tab缩进;插件开发者可使用setContext创建自定义上下文并在when中调用;调试时可通过“Developer: Inspect Context Keys”检查当前激活的上下文状态,确保条件正确匹配。

在 VS Code 中,when 子句用于控制快捷键、菜单项或命令的启用条件。它常出现在 keybindings.json 和 package.json(扩展开发)中,决定某条快捷键何时生效。掌握其高级用法,能让你更精准地定制操作行为。
在 keybindings.json 中,每条快捷键可以包含一个 when 条件:
这个例子表示:仅当编辑器获得焦点且未只读时,Ctrl+D 才触发“添加下一个匹配项”操作。
when 支持多种内置上下文(context)变量,还可通过逻辑运算组合:
支持的逻辑操作符:
场景一:仅在终端中启用 Ctrl+C
{ "key": "ctrl+c", "command": "workbench.action.terminal.copySelection", "when": "terminalFocus && terminalTextSelected" }这样,在终端有选中文本且获得焦点时,Ctrl+C 才执行复制,避免与编辑器冲突。
场景二:区分编辑器与搜索框中的 Enter 行为
{ "key": "enter", "command": "acceptSelectedSuggestion", "when": "suggestWidgetVisible && textInputFocus" }, { "key": "enter", "command": "editor.action.insertLineAfter", "when": "editorTextFocus && !suggestWidgetVisible" }第一个绑定让 Enter 在代码补全弹窗出现时确认建议;第二个确保无补全时正常换行。
场景三:禁用特定语言下的快捷键
{ "key": "tab", "command": "editor.action.indentLines", "when": "editorTextFocus && !editorReadonly && resourceLangId != 'markdown'" }在 Markdown 文件中按下 Tab 不再整体缩进行,可配合其他方式处理列表缩进。
如果你是插件开发者,可通过 API 注册自定义上下文,然后在 when 中使用:
之后可在快捷键中写:
"when": "myExtension.inSpecialMode"这适合实现模式切换类功能,比如进入“审查模式”后启用一组专属快捷键。
如果快捷键不生效,可能是 when 条件未满足。使用以下方法排查:
基本上就这些。合理使用 when 子句,能让快捷键更智能、更安全,避免误触发。关键是理解当前编辑环境的状态,并用上下文精确描述它。
以上就是VS Code快捷键when子句的高级用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号