VS Code:如何判断References View是否获得焦点(自定义快捷键用)
问题描述
我在OS X系统上使用Visual Studio Code 1.96.2版本,具体版本信息:
Version: 1.96.2 (Universal)
Commit: fabdb6a30b49f79a7aba0f2ad9df9b399473380f
Date: 2024-12-19T10:22:47.216Z
Electron: 32.2.6
ElectronBuildId: 10629634
Chromium: 128.0.6613.186
Node.js: 20.18.1
V8: 12.8.374.38-electron.0
OS: Darwin arm64 23.6.0
我使用内置的References Search View(扩展ID:vscode.references-view),想创建自定义快捷键,通过when表达式限制它仅在侧边栏/活动栏中的该视图获得焦点时执行。
我已尝试以下状态,但均无法标识该视图/树是否获得焦点:
- 自动补全的
reference-view.tree.active(此状态似乎仅标识引用视图树是否有结果) - 内置扩展使用的
reference-view.active - 内置扩展使用的
reference-list.active
请问是否存在可判断该视图焦点状态的when表达式,或通用的侧边栏视图焦点判断方法?
解决方案
针对References Search View的精准判断
你可以使用以下when表达式来判断该视图是否获得焦点:
"when": "activeViewlet == 'workbench.view.extension.references-view' && listFocus"
activeViewlet == 'workbench.view.extension.references-view':确保当前激活的侧边栏视图是References Search ViewlistFocus:确保视图内的引用结果树处于焦点状态
如果只需要判断视图本身处于激活状态(不管内部列表是否聚焦),可以简化为:
"when": "activeViewlet == 'workbench.view.extension.references-view'"
通用侧边栏视图焦点判断方法
对于任意内置或第三方侧边栏视图,通用判断逻辑分为两步:
- 获取视图ID:打开命令面板(
Cmd+Shift+P),执行Developer: Toggle Developer Tools,在控制台输入console.log(vscode.window.activeViewletId),切换到目标视图后即可查看其ID - 组合
when表达式:- 判断视图激活:
activeViewlet == '视图ID' - 判断视图内列表/树聚焦:
activeViewlet == '视图ID' && listFocus(适用于带列表结构的视图) - 判断视图内输入框聚焦:
activeViewlet == '视图ID' && inputFocus(适用于带搜索框的视图)
- 判断视图激活:
内容的提问来源于stack exchange,提问作者Christopher Lewis
相关产品推荐
相关产品推荐

