【问题标题】:Nesting/joining a workspace input variable inside multi folder workspaceFolder variable?在多文件夹workspaceFolder变量中嵌套/加入工作区输入变量?
【发布时间】:2021-06-25 02:07:24
【问题描述】:

有没有办法将输入变量嵌套在其他变量中,尤其是${workspaceFolder}?以 .code-workspace 文件为例:

{
  "folders": [
    {
      "name": "Client",
      "path": "path/to/client/code"
    },
    {
      "name": "Server",
      "path": "path/to/server/code"
    },
    {
      "name": "Shared",
      "path": "path/to/shared/code"
    }
  ],
  "launch": {
    "version": "0.2.0",
    "configurations": [
      {
        "name": "(gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
        "cwd": "${workspaceFolder}",
        "program": "apphere"
      }
    ],
    "inputs": [
      {
        "id": "pickProject",
        "type": "pickString",
        "description": "Select a project:",
        "options": [
          "Client",
          "Server"
        ]
      }
    ]
  }
}

所有项目(本例中的客户端和服务器)将共享相同的启动配置,唯一需要更改的是 cwd 值。不幸的是,当您收到此错误时,您不能直接在多文件夹工作区中使用 ${workspaceFolder}

变量 ${workspaceFolder} 无法在多文件夹工作区中解析。使用 ':' 和工作区文件夹名称限定此变量的范围。

如果能够做这样的事情,那就完美了:

"cwd": "${workspaceFolder:${input:pickProject}}"

不幸的是,这不起作用。还有其他方法可以为 workspaceFolder 变量提供动态范围吗?

我确实想出了一种相当老套的方法来处理这个问题,尽管感觉应该有更好的方法:如果将 pickString 输入选项更改为文件夹路径,然后将调试 cwd 更改为 "cwd": "${workspaceFolder:Shared}/../../../${input:pickProject}",则可以任意选择其中一个文件夹,遍历到根工作区目录,然后将 ${input:pickProject} 变量附加到末尾。除了目录遍历之外,您看到的调试选项将是“path/to/client/code”和“path/to/server/code”,而不是更干净的“Client”和“Server”。但至少它似乎确实有效,尽管不是太理想。

【问题讨论】:

    标签: visual-studio-code


    【解决方案1】:

    使用扩展名Command Variable,您有可能的解决方案

    extension.commandvariable.file.fileAsKey

    当您为客户端或服务器打开一个当前文件时,F5 将根据当前文件的路径选择正确的cwd

      "launch": {
        "version": "0.2.0",
        "configurations": [
          {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "cwd": "${input:getCWD}",
            "program": "apphere"
          }
        ],
        "inputs": [
          {
            "id": "getCWD",
            "type": "command",
            "command": "extension.commandvariable.file.fileAsKey",
            "args": {
              "/client/": "/path/to/client/code",
              "/server/": "/path/to/server/code"
            }
          }
        ]
      }
    

    extension.commandvariable.pickStringRemember

    如果您想要一个显示 ClientServer 但返回相应路径的选择列表,请使用:

      "launch": {
        "version": "0.2.0",
        "configurations": [
          {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "cwd": "${input:pickPath}",
            "program": "apphere"
          }
        ],
        "inputs": [
          {
            "id": "pickPath",
            "type": "command",
            "command": "extension.commandvariable.pickStringRemember",
            "args": {
              "description": "Select a project:",
              "options": [
                ["Client", "/path/to/client/code"],
                ["Server", "/path/to/server/code"]
              ]
            }
          }
        ]
      }
    

    【讨论】:

      猜你喜欢
      • 2022-07-10
      • 2017-02-08
      • 2013-06-24
      • 2020-07-10
      • 2022-12-19
      • 2022-01-24
      • 2020-10-20
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多