Visual studio code 在vscode扩展名中列出文件夹中的文件
我正在创建一个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',扩展应该能够为我提供以下内容的自动完
我想获取用户键入的内容,如果该值解析为工作区中的某个文件夹,我想列出该文件夹中的所有文件,以便自动完成
例如,假设:
- 位于:/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);
});