关于修改VSCode Quick Open代码添加文件创建功能的技术问询
关于VSCode Quick Open的三个技术问题解答
1. VSCode源码中Quick Open的代码位置
Quick Open(即"Anything Quick Access")的核心实现代码位于VSCode源码仓库的:src/vs/workbench/contrib/quickaccess/browser/anythingQuickAccess.ts
其注册激活逻辑可在同目录下的quickAccess.ts或quickAccessExtensions.ts中找到,该功能通过IQuickAccessRegistry注册为全局的Quick Access提供者。
2. 将无结果提示改为可点击执行创建操作的实现思路
当前你修改的NO_RESULTS_PICK是一个基础的QuickPickItem,要让它具备可点击执行操作的能力,可以通过以下两种方式实现:
- 利用选择事件监听:在Quick Open的逻辑中,监听
onDidChangeSelection事件,当选中该无结果项时,触发文件创建的逻辑。可以给这个item添加自定义属性(比如{ type: 'create-file', filter: filter }),方便在事件回调中识别并获取输入的文件名。 - 添加按钮元素:给
NO_RESULTS_PICK添加buttons属性,配置一个可点击的按钮(如QuickInputButton),并绑定按钮点击事件来执行创建操作。示例代码片段:
const NO_RESULTS_PICK: QuickPickItem = { label: localize('noAnythingResults', `Create New file (${filter}) (Press 'Enter' to confirm)`), buttons: [new ThemeIconButton('new-file')] }; // 绑定按钮点击事件 quickPick.onDidTriggerButton(({ button, item }) => { if (item === NO_RESULTS_PICK && button instanceof ThemeIconButton && button.iconId === 'new-file') { // 执行文件创建逻辑 } });
注意:原生Quick Open的无结果项默认没有交互逻辑,需要修改内部的QuickPick实例代码来添加上述事件监听。
3. 演示代码无法在真实VSCode中生效的原因
你在vscode-extension-samples/quickinput-sample中实现的是基于VSCode扩展API的自定义QuickInput组件,而原生的Quick Open是VSCode工作台的内部核心功能,扩展无法直接修改原生Quick Open的内部逻辑(包括NO_RESULTS_PICK的定义和交互)。
要让该功能在真实VSCode环境中生效,有两种可行方案:
- 自定义QuickAccessProvider:通过扩展注册一个自定义的Quick Access提供者,替代或补充原生的Anything Quick Access,在自己的提供者中实现无结果时的创建提示逻辑。
- 修改VSCode源码并编译:直接修改VSCode源码中
anythingQuickAccess.ts里的NO_RESULTS_PICK相关逻辑,然后自行编译VSCode安装包使用。
内容的提问来源于stack exchange,提问作者Skylar Gan
相关产品推荐
相关产品推荐

