对于workspace.getConfiguration:如何从多根工作空间文件(.code-workspace)获取设置

rio*_*oV8 3 visual-studio-code vscode-extensions

您WorkspaceConfiguration.update(...)可以指定需要将设置写入ConfigurationTarget.Workspace. .code-workspace如果是多根,这会更新工作区文件;.vscode/settings.json如果打开单个文件夹,这会更新工作区文件夹。

.code-workspace现在我想从工作区(或)获取当前设置.vscode/settings.json。

ConfigurationScope我需要在通话中设置什么workspace.getConfiguration?

我需要使用的 URI 是什么?和总是会给我TextDocument带来WorkspaceFolder价值.vscode/settings.json

rio*_*oV8 5

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

在我的扩展中,我设置了一个configuration设置"scope": "resource"

      "configuration": {
        "title": "Test Config",
        "properties": {
          "extension.someconfig": {
            "type": "string",
            "scope": "resource",
            "description": "some test configuration setting",
            "default": "default-value"
          }
        }
      }
Run Code Online (Sandbox Code Playgroud)

定义全局/用户级别的值:"extension.someconfig": "user-value"

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

    let uri = vscode.window.activeTextEditor.document.uri;
    let config = vscode.workspace.getConfiguration('extension', uri);
    console.log('---------');
    console.log('someconfig:', config.get('someconfig'));
    let inspect = config.inspect('someconfig');
    console.log('inspect.key:', inspect.key);
    console.log('inspect.defaultValue:', inspect.defaultValue);
    console.log('inspect.globalValue:', inspect.globalValue);
    console.log('inspect.workspaceValue:', inspect.workspaceValue);
    console.log('inspect.workspaceFolderValue:', inspect.workspaceFolderValue);
Run Code Online (Sandbox Code Playgroud)

我设置了一个测试 MR 工作区:

testconfig
  + project1
  |   + .vscode
  |   |   + settings.json    // "extension.someconfig": "project1-value"
  |   + main.py
  + project2
  |   + .vscode
  |   |   + settings.json    // "extension.someconfig": "project2-value"
  |   + main.py
  + project3
  |   + .vscode
  |   |   + settings.json    // "extension.someconfig": "project3-value"
  |   + main.py
  + testconfig.code-workspace      // "extension.someconfig": "workspace-value"
Run Code Online (Sandbox Code Playgroud)

当我记录非作用域 的设置时getConfiguration:

let config = vscode.workspace.getConfiguration('extension');
Run Code Online (Sandbox Code Playgroud)
let config = vscode.workspace.getConfiguration('extension');
Run Code Online (Sandbox Code Playgroud)

使用作用域 getConfiguration时:

let config = vscode.workspace.getConfiguration('extension', uri);
Run Code Online (Sandbox Code Playgroud)
All 3 main.py files give:

someconfig: workspace-value
inspect.key: extension.someconfig
inspect.defaultValue: default-value
inspect.globalValue: user-value
inspect.workspaceValue: workspace-value
inspect.workspaceFolderValue: undefined
Run Code Online (Sandbox Code Playgroud)

当范围限定为 WorkspaceFolder 时

let config = vscode.workspace.getConfiguration('extension', uri);
Run Code Online (Sandbox Code Playgroud)

结果与文件作用域的结果相同。


当确定合并设置后,该设置workspaceFolderValue将undefined用于非作用域getConfiguration调用。

该调用使用与返回的调用inspect相同的范围getConfigurationWorkspaceConfiguration