You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode扩展API:如何通过contributes commands判断Markdown预览是否聚焦?

解决VSCode中markdownPreviewFocus无法在全局when条件中使用的问题

我明白你遇到的痛点了——你参考了VSCode官方仓库里markdown-language-features扩展的配置,想在编辑器标题栏的命令中用markdownPreviewFocus==false来控制命令显示,但实际测试发现这个条件根本不生效。

问题根源

markdownPreviewFocus这个上下文键是Markdown预览Webview内部专属的状态,只有在预览面板自身的交互(比如右键菜单、预览内的快捷键触发)场景下,VSCode才会识别这个键。而编辑器标题栏属于全局UI区域,全局上下文无法读取Webview内部的聚焦状态,所以这个条件在这里完全不起作用。

替代解决方案

我们可以用VSCode全局可访问的上下文键组合来实现相同的需求:

场景1:仅在Markdown编辑器激活且预览未聚焦时显示命令

如果你的命令只针对Markdown文件场景,用这个配置:

"editor/title": [
  {
    "command": "extension.my_command",
    "when": "editorLangId == markdown && !(activeWebviewPanelId == markdown.preview)",
    "group": "navigation"
  }
]

场景2:任何非Markdown预览聚焦的场景都显示命令

如果不需要限制为Markdown编辑器,简化条件即可:

"editor/title": [
  {
    "command": "extension.my_command",
    "when": "!(activeWebviewPanelId == markdown.preview)",
    "group": "navigation"
  }
]

原理说明

  • activeWebviewPanelId是VSCode提供的全局上下文键,代表当前聚焦的Webview面板ID,而Markdown预览面板的固定ID就是markdown.preview。
  • 通过!(activeWebviewPanelId == markdown.preview)就能准确判断当前焦点不在Markdown预览面板上。
  • 搭配editorLangId == markdown可以进一步缩小生效范围,只在Markdown编辑器激活时显示命令。

内容的提问来源于stack exchange,提问作者GorvGoyl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:29