Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio code 在vscode扩展名中列出文件夹中的文件_Visual Studio Code_Vscode Extensions - Fatal编程技术网

Visual studio code 在vscode扩展名中列出文件夹中的文件

Visual studio code 在vscode扩展名中列出文件夹中的文件,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我正在创建一个vscode扩展,它可以自定义自动完成文件路径 我想获取用户键入的内容,如果该值解析为工作区中的某个文件夹,我想列出该文件夹中的所有文件,以便自动完成 例如,假设: 位于:/home/me/my vs project的工作区 使用文件: /home/me/my vs project/assets/dog.png /主页/me/my vs项目/assets/cat.jpeg 如果我在vscode中键入'assets'或'./assets',扩展应该能够为我提供以下内容的自动完

我正在创建一个vscode扩展,它可以自定义自动完成文件路径


我想获取用户键入的内容,如果该值解析为工作区中的某个文件夹,我想列出该文件夹中的所有文件,以便自动完成


例如,假设:

  • 位于:/home/me/my vs project的工作区
  • 使用文件:
    • /home/me/my vs project/assets/dog.png
    • /主页/me/my vs项目/assets/cat.jpeg

如果我在vscode中键入'assets'或'./assets',扩展应该能够为我提供以下内容的自动完成列表:

  • “./assets/dog.png”
  • “./assets/cat.png”

下面是一段不起作用的代码(返回0个结果)


出于某种原因,上面的代码返回0个URI。关于我如何格式化glob以实现这一点的想法?和/或如果有更好的方法?

< P> >我可以使用<代码> VSCODE .RelivEpAtTrn ——我确信我可以使用通用的GnWorkStudio来完成它,但是IM仍然不清楚什么是<代码> FixFrand(..)< /C> >在匹配文件时考虑“根”;RelativePattern显式地相对于工作区根

let workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(document.uri);

        if (!workspaceFolder || document.isUntitled) {
            return undefined;
        }

        // Workspace folder: /home/me/my-project
        let workspaceFolderPath: string = workspaceFolder.uri.path;

        let relativeSearchFolderPrefix = path.normalize(path.dirname(document.uri.path) + '/' + searchText);
        relativeSearchFolderPrefix = path.relative(workspaceFolderPath, relativeSearchFolderPrefix);

            let relativePattern: vscode.RelativePattern = new vscode.RelativePattern(
                workspaceFolderPath,
                relativeSearchFolderPrefix + '/**/*.{png,jpeg,jpg,gif}');

return vscode.workspace.findFiles(globPattern, null, 50).then((uris: vscode.Uri[] ) => {            
            let relativePaths: string[] = [];

            uris.forEach((uri: vscode.Uri) => {             
                relativePaths.push(path.relative(current, uri.path));
            });

            // trivial custom function that turns an array of strings into CompletionItems
            return getCompletionItems(relativePaths, vscode.CompletionItemKind.File);
        }); 

你好在您的vs Glob示例中,这不会在工作区中任何名为“资产”的文件夹中找到所有文件吗?我想要一个glob,它只能找到文件夹的直接子文件。是的,我想你刚刚错过了扩展glob部分。Ie:在'let glob=inputAsWorkspaceRelativeFolder+'/*'中,`查看不推荐使用的
vscode.workspace.rootPath时,结尾“/*”应该是“/****”或更好的“/*.png,jpeg,jpg,gif}”:当只有一个文件夹打开时,该文件夹将作为工作区根目录,但当加载了更多文件夹/工作区时,只能使用相对模式进行搜索,因为您没有更多的根路径可用。我认为您是VS代码方面的专家,因为您使用的是节点,您可以从这些答案中任意选择-
let workspaceFolder: vscode.WorkspaceFolder | undefined = vscode.workspace.getWorkspaceFolder(document.uri);

        if (!workspaceFolder || document.isUntitled) {
            return undefined;
        }

        // Workspace folder: /home/me/my-project
        let workspaceFolderPath: string = workspaceFolder.uri.path;

        let relativeSearchFolderPrefix = path.normalize(path.dirname(document.uri.path) + '/' + searchText);
        relativeSearchFolderPrefix = path.relative(workspaceFolderPath, relativeSearchFolderPrefix);

            let relativePattern: vscode.RelativePattern = new vscode.RelativePattern(
                workspaceFolderPath,
                relativeSearchFolderPrefix + '/**/*.{png,jpeg,jpg,gif}');

return vscode.workspace.findFiles(globPattern, null, 50).then((uris: vscode.Uri[] ) => {            
            let relativePaths: string[] = [];

            uris.forEach((uri: vscode.Uri) => {             
                relativePaths.push(path.relative(current, uri.path));
            });

            // trivial custom function that turns an array of strings into CompletionItems
            return getCompletionItems(relativePaths, vscode.CompletionItemKind.File);
        });