如何在VSCode扩展中获取右键菜单点击文件的URI?
问题
我正在开发一款VSCode扩展,已实现通过右键点击文件调用指定函数,相关package.json配置如下:
"main": "./extension.js", "contributes": { "commands": [{ "command": "flutter-localization-generator.create", "title": "localize_it: create" }], "menus": { "explorer/context": [{ "command": "flutter-localization-generator.create" }] } }
现在需要获取用户右键点击位置的URI,请问是否可行?如何在activate函数中访问该URI?我尝试了以下代码,但打印内容均未得到需要的路径:
function activate(context) { console.log('Congratulations, your extension "flutter-localization-generator" is now active!'); let disposable = vscode.commands.registerCommand('flutter-localization-generator.create', function () { console.log(context.globalStorageUri); console.log(context.extensionUri); console.log(context.extensionPath); console.log(context.rootPath); }); context.subscriptions.push(disposable); }
解决方案
可行,VSCode会自动将右键点击的文件/文件夹URI作为参数传递给命令的回调函数,你只需要修改回调函数的参数定义即可获取:
修改命令回调函数
在注册命令时,给回调函数添加uri参数,这个参数就是用户右键点击位置的资源URI:function activate(context) { console.log('Congratulations, your extension "flutter-localization-generator" is now active!'); let disposable = vscode.commands.registerCommand('flutter-localization-generator.create', function (uri) { // 打印右键点击的URI console.log('右键点击的URI:', uri); // 若需要转成本地文件路径,可使用fsPath属性 console.log('对应本地路径:', uri.fsPath); }); context.subscriptions.push(disposable); }可选:优化菜单配置
可以在package.json的菜单配置中添加when条件,确保命令只在文件/文件夹上右键时显示,避免无意义的触发:"menus": { "explorer/context": [{ "command": "flutter-localization-generator.create", "when": "resourceScheme == file" }] }
这样就能准确获取到用户右键点击位置的URI和对应的本地文件路径了。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

