VSCode扩展开发:如何获取多选文件数组并传入方法解析?
获取VS Code资源管理器中多选的文件数组
这个问题我之前碰到过,其实在VS Code扩展里获取资源管理器多选的文件很简单,核心是利用命令回调的参数和正确的菜单触发配置:
1. 在命令注册时接收选中项参数
当用户在资源管理器中多选文件并触发你的扩展命令时,VS Code会自动把所有选中的文件/文件夹的Uri数组作为参数传给命令的回调函数。你只需要在注册命令时接收这个参数即可:
import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 注册你的扩展命令 let disposable = vscode.commands.registerCommand('yourExtension.parseSelectedFiles', (selectedItems: vscode.Uri[]) => { // 检查是否有选中的文件 if (!selectedItems || selectedItems.length === 0) { vscode.window.showInformationMessage('请先选中至少一个文件'); return; } // 遍历所有选中的文件,传入你的解析方法 selectedItems.forEach(fileUri => { console.log(`开始解析文件:${fileUri.fsPath}`); // 调用你的自定义解析方法 yourParseFunction(fileUri); }); }); context.subscriptions.push(disposable); } // 示例解析方法 function yourParseFunction(fileUri: vscode.Uri) { // 这里写你的文件解析逻辑 }
2. 配置package.json的菜单触发条件
为了确保你的命令在资源管理器多选文件时能正常显示并触发,需要在package.json的contributes字段里配置菜单的触发条件:
{ "contributes": { "commands": [ { "command": "yourExtension.parseSelectedFiles", "title": "解析选中的文件" } ], "menus": { "explorer/context": [ { "command": "yourExtension.parseSelectedFiles", // 当选中的是文件,且数量≥1时显示命令 "when": "explorerResourceIsFile && explorerResourceCount >= 1" } ] } } }
这里的explorerResourceCount变量会自动对应选中的文件数量,explorerResourceIsFile确保选中的是文件而非文件夹(如果需要支持文件夹,可以去掉这个条件)。
这样配置后,你就能在资源管理器中多选文件,右键点击触发命令,然后在回调里拿到所有选中的文件Uri数组,传给你的解析方法处理了。
内容的提问来源于stack exchange,提问作者kvne
相关产品推荐
相关产品推荐

