https://code.visualstudio.com/docs/editor/variables-reference#_common-questions Visual Studio Code在调试和任务配置文件以及某些选择设置中支持变量替换。使用$ {variableName}语法在键和值字符串launch.json以及tasks.json文件中支持变量替换。
提示:在tasks.json和launch.json内部的字符串值使用智能感知获得预定义变量的完整列表。
每个工作空间文件夹范围内的变量 通过将根文件夹的名称附加到变量(用冒号分隔),可以进入工作空间的同级根文件夹。如果没有根文件夹名称,则该变量的作用域为使用该文件夹的相同文件夹。例如,在具有文件夹Server和Client的多根工作区中,${workspaceFolder:Client}表示Client根的路径。
您也可以通过$ {env:Name}语法引用环境变量(例如${env:USERNAME})。
{ "type": "node", "request": "launch", "name": "Launch Program", "program": "${workspaceFolder}/app.js", "cwd": "${workspaceFolder}", "args": ["${env:USERNAME}"] }您可以通过$ {config:Name}语法(例如,${config:editor.fontSize})来引用VS Code设置(也称为“configurations” )。
如果上面的预定义变量不足,则可以通过$ {command:commandID}语法将任何VS Code命令用作变量。
插入命令变量后,将运行命令,并用命令的(字符串)结果替换该变量。命令的实现范围从无UI的简单计算到基于VS Code扩展API可用的UI功能的一些复杂功能。
VS Code的Node.js调试器扩展中提供了此功能的示例,该扩展提供了一个交互式命令,extension.pickNodeProcess用于从所有正在运行的Node.js进程的列表中选择单个进程。该命令返回所选进程的进程ID。这样就可以通过以下方式在“ 按进程ID附加”启动配置中使用该extension.pickNodeProcess命令:
{ "configurations": [ { "type": "node", "request": "attach", "name": "Attach by Process ID", "processId": "${command:extension.pickNodeProcess}" } ] }命令变量已经很强大,但是它们缺少一种机制来配置针对特定用例运行的命令。例如,不可能将提示消息或默认值传递给通用的“用户输入提示”。
此限制的解决,是输入变量具有的语法:${input:variableID}。所述variableID指launch.json和tasks.json中inputs的条目部分,其中指定了额外的配置属性。
以下示例显示了task.json使用输入变量的的总体结构:
{ "version": "2.0.0", "tasks": [ { "label": "task name", "command": "${input:variableID}" // ... } ], "inputs": [ { "id": "variableID", "type": "type of input variable" // type specific configuration attributes } ] }当前,VS Code支持三种类型的输入变量:
promptString:显示一个输入框,用于从用户那里获取字符串。pickString:显示一个“快速选择”下拉列表,使用户可以从多个选项中进行选择。command:运行任意命令。 每种类型都需要其他配置属性: promptString: 描述:快速输入中显示的内容为输入提供了上下文。default:如果用户未输入其他内容,将使用的默认值。 pickString: 描述:快速选择中显示的内容为输入提供了上下文。options:供用户选择的选项数组。default:如果用户未输入其他内容,将使用的默认值。它必须是选项值之一。 Command: command:命令正在变量插补上运行。args:传递到命令的实现的可选选项包。 以下是的示例tasks.json,说明了使用inputsAngular CLI 的用法: { "version": "2.0.0", "tasks": [ { "label": "ng g", "type": "shell", "command": "ng", "args": ["g", "${input:componentType}", "${input:componentName}"] } ], "inputs": [ { "type": "pickString", "id": "componentType", "description": "What type of component do you want to create?", "options": [ "component", "directive", "pipe", "service", "class", "guard", "interface", "enum", "enum" ], "default": "component" }, { "type": "promptString", "id": "componentName", "description": "Name your component.", "default": "my-new-component" } ] }运行示例:
下面的示例演示如何在调试配置中使用command类型的用户输入变量,该变量使用户可以从特定文件夹中找到的所有测试用例的列表中选择一个测试用例。假定某个扩展提供了一个`extension.mochaSupport.testPicker``命令,该命令可将所有测试用例放置在可配置的位置,并显示一个选择器UI来选择其中的一个。命令输入的参数由命令本身定义。
{ "configurations": [ { "type": "node", "request": "launch", "name": "Run specific test", "program": "${workspaceFolder}/${input:pickTest}" } ], "inputs": [ { "id": "pickTest", "type": "command", "command": "extension.mochaSupport.testPicker", "args": { "testFolder": "/out/tests" } } ] }命令输入也可以与任务一起使用。在此示例中,使用了内置的Terminate Task命令。它可以接受参数以终止所有任务。
{ "version": "2.0.0", "tasks": [ { "label": "Terminate All Tasks", "command": "echo ${input:terminate}", "type": "shell", "problemMatcher": [] } ], "inputs": [ { "id": "terminate", "type": "command", "command": "workbench.action.tasks.terminate", "args": "terminateAll" } ] }请参阅“设置”编辑器(Ctrl +,)中的注释,以了解有关设置特定变量的信息。
为什么没有记录$ {workspaceRoot}? ${workspaceRoot}不建议使用该变量,${workspaceFolder}以便更好地与[Multi-root Workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces)支持保持一致。
我如何知道变量的实际值? 检查变量运行时值的一种简单方法是创建VS Code 任务,以将变量值输出到控制台。例如,要查看的解析值${workspaceFolder},您可以在以下目录中创建并运行以下简单的“ echo”任务(“ 终端” > “运行任务”)tasks.json:
{ "version": "2.0.0", "tasks": [ { "label": "echo", "type": "shell", "command": "echo ${workspaceFolder}" } ] }