Visual studio code 对于workspace.getConfiguration:如何从多根工作区文件(.code workspace)获取设置

Visual studio code 对于workspace.getConfiguration:如何从多根工作区文件(.code workspace)获取设置,visual-studio-code,vscode-settings,vscode-extensions,Visual Studio Code,Vscode Settings,Vscode Extensions,使用,您可以指定需要将设置写入ConfigurationTarget.Workspace。如果是多根目录,则更新Workspace.code Workspace文件;如果打开单个文件夹,则更新Workspace文件夹.vscode/settings.json 现在我想从工作区获取当前设置(.code Workspace或.vscode/settings.json) 我需要在呼叫中设置什么 我需要使用什么URI?TextDocument和WorkspaceFolder总是从.vscode/sett

使用,您可以指定需要将设置写入
ConfigurationTarget.Workspace
。如果是多根目录,则更新Workspace
.code Workspace
文件;如果打开单个文件夹,则更新Workspace文件夹
.vscode/settings.json

现在我想从工作区获取当前设置(
.code Workspace
.vscode/settings.json

我需要在呼叫中设置什么


我需要使用什么URI?
TextDocument
WorkspaceFolder
总是从
.vscode/settings.json
中获取值,我将尝试解释我对这里发生的事情的有限理解(作为扩展编码的相对新手)

假设我有两个命令:

const-codeWorkspaceConfigs=vscode.workspace.getConfiguration('launch');//无范围参数
const launchConfigs=vscode.workspace.getConfiguration('launch',workspace.uri);
在没有范围参数的情况下,我仅从该
*.code工作区
文件获取
启动
设置。即使
.code工作区
文件位于与项目代码不相关的奇怪位置。所以我相信这是对你问题的简短回答。但它更有趣

假设我在工作空间文件夹中有一个'launch.json'文件,然后调用第二个工作空间作用域
getConfiguration()
时,我只得到该工作空间文件夹的
launch.json
设置。是否存在带有
launch
设置的
code工作区

但是如果存在
.code workspace
但没有工作空间文件夹
launch.json
,那么第二个工作空间作用域调用将获得
.code workspace
设置

应该如此,因为现在不再有本地设置来覆盖更全局的
.code工作区
设置

最初我误解了
ConfigurationScope
参数

ConfigurationScope:Uri | TextDocument | WorkspaceFolder |{languageId:string,Uri:Uri}

我原以为
WorkspaceFolder
会得到该WorkspaceFolder的
.vscode/settings.json
中实际列出的设置,但为什么会有
TextDocument
Uri
选项呢(其中不一定有任何设置。但您将范围限制为应用于该文档或uri的那些设置-例如,这是本地设置覆盖全局设置的结果)

const-codeWorkspaceConfigs=vscode.workspace.getConfiguration('launch');//无范围参数

对于这个非作用域版本,我只获得了
.code工作区
设置。虽然
ConfigurationScope
getConfiguration()
命令的可选参数,但我看不到任何地方告诉您将发生什么(作用域可能是什么)如果它被省略了。也许这对其他人来说是显而易见的,但对我来说不是

要从
.code workspace
获取特定设置,我可以这样做:

let settings=vscode.workspace.getConfiguration().get('commandAlias.category');
这个设置在
.code workspace
和user
settings.json
中,在检索配置时,哪个文件处于活动状态似乎并不重要

我找到了方法。它显示了设置中未合并的部分

在我的扩展中,我用
范围设置了
配置
设置:“资源”

“配置”:{
“标题”:“测试配置”,
“财产”:{
“extension.someconfig”:{
“类型”:“字符串”,
“范围”:“资源”,
“说明”:“一些测试配置设置”,
“默认值”:“默认值”
}
}
}
为全局/用户级别定义了一个值:
“extension.someconfig”:“User value”

设置一个命令,根据当前文件记录一些内容。我不记录
inspect
的语言部分,因为我不使用它们(以及在哪里定义它们)

let uri=vscode.window.activeTextEditor.document.uri;
让config=vscode.workspace.getConfiguration('extension',uri);
console.log('-----------');
console.log('someconfig:',config.get('someconfig');
让inspect=config.inspect('someconfig');
log('inspect.key:',inspect.key);
console.log('inspect.defaultValue:',inspect.defaultValue');
log('inspect.globalValue:',inspect.globalValue');
console.log('inspect.workspaceValue:',inspect.workspaceValue');
console.log('inspect.workspaceFolderValue:',inspect.workspaceFolderValue');
我已经设置了一个测试MR工作区:

testconfig
+项目1
|+.vscode
||+settings.json/“extension.someconfig”:“project1值”
|+main.py
+项目2
|+.vscode
||+settings.json/“extension.someconfig”:“project2值”
|+main.py
+项目3
|+.vscode
||+settings.json/“extension.someconfig”:“project3值”
|+main.py
+testconfig.code-workspace/“extension.someconfig”:“工作区值”
当我记录非作用域的设置时
getConfiguration

let config = vscode.workspace.getConfiguration('extension');
let config = vscode.workspace.getConfiguration('extension', uri);
所有3个main.py文件都提供:
someconfig:workspace值
inspect.key:extension.someconfig
inspect.defaultValue:默认值
inspect.globalValue:用户值
inspect.workspaceValue:工作空间值
inspect.workspaceFolderValue:未定义
使用范围限定的
getConfiguration
时:

let config = vscode.workspace.getConfiguration('extension');
let config = vscode.workspace.getConfiguration('extension', uri);
适用于所有3个main.py文件:
inspect.key:extension.someconfig
inspect.defaultValue:默认值
inspect.globalValue:用户-