visual-studio-code - 在 vscode 扩展的文件夹中列出文件
问题描述
我正在创建一个 vscode 扩展,它可以对文件路径进行一些自定义自动完成。
我想获取用户输入的内容,如果该值解析为工作区中的文件夹,我想列出该文件夹中的所有文件以自动完成。
例如,给定:
- 位于以下位置的工作区:/home/me/my-vs-project
- 与文件:
- /home/me/my-vs-project/assets/dog.png
- /home/me/my-vs-project/assets/cat.jpeg
如果我在 vscode 中输入“assets”或“./assets”,扩展程序应该能够为我提供一个自动完成列表:
- './assets/dog.png'
- './assets/cat.png'
这是一段不起作用的代码片段(返回 0 个结果)..
let inputAsWorkspaceRelativeFolder = getInput(document, position); // for example, would return: '/home/me/my-vs-project/assets' for input of './assets'
let glob = inputAsWorkspaceRelativeFolder + '/*';
vscode.workspace.findFiles(glob, null, 100).then((uris: vscode.Uri[] ) => {
uris.forEach((uri: vscode.Uri) => {
console.log(uri);
});
});
出于某种原因,上面的代码虽然返回 0 uris。关于如何格式化 glob 以实现这一点的想法?和/或是否有更好的方法?
解决方案
我认为你冤枉了全球。我发现了这个关于 Glob 模式组合的有趣wiki 。
let inputAsWorkspaceRelativeFolder = 'asset'; // for example, would return: '/home/me/my-vs-project/assets' for input of './assets'
//https://github.com/ev3dev/vscode-ev3dev-browser/wiki/Glob-Patterns
let glob = '**/'+inputAsWorkspaceRelativeFolder+'/*.*';//or +'/{*.png,*.jpeg}';
或者你可以使用节点内置的 fs
import * as fs from 'fs';
fs.readdir(inputAsWorkspaceRelativeFolder, (err, files: string[]) => {
files.forEach((file: path) => {
const uri = vscode.Uri.file(file);
console.log(uri);
});
});
更简单,如果您想获取资产文件夹中的所有文件并且不想过滤扩展名。
推荐阅读
- c# - 带有 xampp 的路径“localhost”
- node.js - 模块“googleapis”未在 package.json 中列为依赖项
- kotlin - 关于 Kotlin 的一些基本问题
- maven - Maven Central 到底是哪个存储库?
- angular - 在 Angular Ag-grid 中使用“/”传递参数名称
- mysql - 为共享相同列值的每个表条目选择最低整数值(非唯一)
- java - 返回类型为 void 时的单元测试保存方法
- python - 无法安装私有 Github python repo
- node.js - 如何修复“错误:spawn c:\Python\27\python.exe ENOENT”
- arrays - 使用 UIPicker 执行 segue 的 if 语句