【问题标题】:How to get the Multi Selected files from the File Explorer in an extension command如何在扩展命令中从文件资源管理器中获取多选文件
【发布时间】:2022-01-15 02:05:39
【问题描述】:

package.json 中,您可以将命令添加到文件资源管理器上下文菜单。

在文件资源管理器中,您可以选择多个文件,但我的命令只获取最后选择的文件 URI 作为参数。

我可以在文件资源管理器中获取所有选定文件的列表吗?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    您可以查看我的扩展名Find and Transform,以了解在触发资源管理器上下文菜单命令时我如何解析多个文件。 [那里有一些额外的代码,因为该命令可以由键绑定或资源管理器/编辑器/选项卡菜单触发,因此必须以不同的方式处理它们。]

    let contextMenuCommandFile = vscode.commands.registerCommand('find-and-transform.searchInFile', async (...commandArgs) => {
    
        let args = {};
    
        if (commandArgs?.length === 1 && !(commandArgs[0] instanceof vscode.Uri)) {   // if from keybinding
          let argsArray = Object.entries(commandArgs[0]).filter(arg => {
            return searchCommands.getKeys().includes(arg[0]);
          });
          Object.assign(args, Object.fromEntries(argsArray));
        }
    
        args.filesToInclude = await parseCommands.parseArgs(commandArgs, "file");
        args.triggerSearch = true;
            searchCommands.useSearchPanel(args);
        });
    
        context.subscriptions.push(contextMenuCommandFile);
    

    您可能缺少此 async (...commandArgs) => { 以将所有可用的传递参数放入数组中。

    ...commandArgs 如果来自键绑定,则长度为 1,如果从上下文菜单触发,则长度为 2无论在资源管理器中选择了多少文件,然后右键单击一个并选择命令。

    commandArgs[0] 是我右键单击的单个文件(即最后一个文件)。
    commandsArgs[1] 本身是资源管理器中所有选定文件的数组。

    然后,我将要解析的 commandArgs 数组(因为我只需要一个以逗号分隔的所选文件列表)发送到 parseCommands.parseArgs() [好吧,这个函数名字很奇怪!)。

    这里的操作位:

        else if (commandArgs[1][0] instanceof vscode.Uri) {              // explorer/context
          for (const resource of commandArgs[1]) {
            const thisResource = vscode.workspace.asRelativePath(resource.fsPath);
            resources += `${ thisResource }, `;
          }
          resources = resources.substring(0, resources.length - 2);  // strip ', ' off end
          return resources;
        }
    

    【讨论】:

    • 啊,那个讨厌的...,我编程的Python很多,你可以简单的结果字符串:return commandArgs[1].map(r => vscode.workspace.asRelativePath(r.fsPath)).join(', ');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2017-09-30
    • 2011-01-31
    相关资源
    最近更新 更多