23

我正在为 VS Code 编写一个插件,我需要知道调用扩展的文件的路径,无论是从编辑器上下文菜单或资源管理器上下文菜单中调用它,还是用户只需键入扩展命令。

function activate(context){
    // get full path of the file somehow
}

提前致谢!

4

4 回答 4

29

如果您需要使用文件uri.fsPath 如果您需要使用工作区文件夹uri.path

if(vscode.workspace.workspaceFolders !== undefined) {
    let wf = vscode.workspace.workspaceFolders[0].uri.path ;
    let f = vscode.workspace.workspaceFolders[0].uri.fsPath ; 

    message = `YOUR-EXTENSION: folder: ${wf} - ${f}` ;

    vscode.window.showInformationMessage(message);
} 
else {
    message = "YOUR-EXTENSION: Working folder not found, open a folder an try again" ;

    vscode.window.showErrorMessage(message);
}

更多细节可以从VS Code API获得

于 2018-12-25T06:17:49.183 回答
17

您可以调用 vscode 窗口属性来检索文件路径或名称,具体取决于您要查找的内容。当您执行命令时,这将为您提供在当前选项卡中打开的文件的名称。如果从资源管理器上下文中调用,我不知道它是如何工作的。

var vscode = require("vscode");
var path = require("path");
function activate(context) {
   var currentlyOpenTabfilePath = vscode.window.activeTextEditor.document.fileName;
   var currentlyOpenTabfileName = path.basename(currentlyOpenTabfilePath);
   //...
}
于 2017-03-06T23:25:31.517 回答
6
import * as vscode from "vscode";
import * as fs from "fs";   

var currentlyOpenTabfilePath = vscode.window.activeTextEditor?.document.uri.fsPath;

以上代码用于查找当前在vscode上激活的文件的路径。

vscode.window.activeTextEditor获取编辑器的引用并document.uri.fsPath以字符串格式返回该文件的路径

于 2020-04-10T15:10:34.873 回答
2

下面是windows中vscode返回的各种路径示例:

扩展路径:

vscode.extensions.getExtension('extension.id').extensionUri.path
> /c:/Users/name/GitHub/extensionFolder 
vscode.extensions.getExtension('extension.id').extensionUri.fsPath
> c:\Users\name\GitHub\extensionFolder

当前文件夹:

vscode.workspace.workspaceFolders[0].uri.path
> /c:/Users/name/Documents/Notes 
vscode.workspace.workspaceFolders[0].uri.fsPath
> c:\Users\name\Documents\Notes 

当前编辑器文件:

vscode.window.activeTextEditor.document.uri.path
> /c:/Users/name/Documents/Notes/temp.md 
vscode.window.activeTextEditor.document.uri.fsPath
> c:\Users\name\Documents\Notes\temp.md 

请注意,pathfsPath引用同一个文件夹。fsPath 以适合操作系统的形式提供路径。

于 2021-09-04T03:40:34.020 回答