任务/启动输入变量 提供了一种使用
命令输入变量
实现此操作的方法。该命令可以来自于VSCode内置命令或扩展程序。在您的情况下,没有内置命令返回给定工作区中文件夹列表。但是,在扩展程序中很容易实现它。文档没有给出如何实现这一点的完整示例,所以我将在这里展示一个。首先演示它工作的演示如下:
![Using an extension command to populate a pickString variable](https://istack.dev59.com/EMjRk.gif)
。以下是完整的
tasks.json
文件:
{
"version": "2.0.0",
"tasks": [
{
"label": "List Folder Choice files",
"type": "shell",
"command": "ls",
"args": [
"${input:pickTestDemo}"
],
"problemMatcher": []
}
],
"inputs": [
{
"id": "pickTestDemo",
"type": "command",
"command": "folder-operations.getFoldersInWorkspace"
},
]
}
你可以在输入变量中看到一个命令是从“folder-operations”扩展中调用的。由于该命令返回一个“QuickPick”元素,所以你运行任务时会看到它。以下是扩展的核心代码:
const vscode = require('vscode');
const fs = require('fs');
const path = require('path');
function activate(context) {
let disposable = vscode.commands.registerCommand('folder-operations.getFoldersInWorkspace', async function () {
const wsFolders = await vscode.workspace.workspaceFolders;
if (!wsFolders) vscode.window.showErrorMessage('There is no workspacefolder open.')
const currentWorkSpace = await vscode.workspace.getWorkspaceFolder(vscode.window.activeTextEditor.document.uri);
const allFilesFolders = fs.readdirSync(currentWorkSpace.uri.fsPath);
const onlyFolders = allFilesFolders.filter(f => fs.statSync(path.join(currentWorkSpace.uri.fsPath, f)).isDirectory());
return vscode.window.showQuickPick(onlyFolders);
});
context.subscriptions.push(disposable);
}
exports.activate = activate;
function deactivate() {}
module.exports = {
activate,
deactivate
}
这里有一个链接,链接到了 folder-operations 演示扩展程序,您可以查看完整的扩展程序代码和其 package.json 文件。一旦您设置好扩展程序发布凭据,发布更多扩展程序就非常容易了。