Visual Studio Code 变量引用

Visual Studio Code 在调试和任务配置文件以及一些选择设置中支持变量替换。使用${variableName}语法,在launch.json和tasks.json文件中的键和值字符串中进行变量替换。

预设的变量

支持的变量有:

  • ${workspaceFolder} - 在VS Code中打开的文件夹的最顶层路径(根文件夹)
  • ${workspaceFolderBasename} - 在VS Code中打开的文件夹的名称,不包括 “ / ”
  • ${file} - 当前打开的文件名称(绝对路径 + 主名 + 扩展名)
  • ${relativeFile} - 相对文件名(文件夹名 + “/" + 文件全名)
  • ${relativeFileDirname} - 当前文件的文件夹名(只有名字,没有路径)
  • ${fileBasename} - 当前文件全名(主名+扩展名)
  • ${fileBasenameNoExtension} - 当前文件主名(不含扩展名)
  • ${fileDirname} - 文件的绝对路径,不包括文件名和末尾的路径分隔符
  • ${fileExtname} - 当前打开的文件的扩展名
  • ${cwd} - the task runner's current working directory on startup
  • ${lineNumber} - 光标所在位置的代码的行号
  • ${selectedText} - 当前编辑文件中选择的内容
  • ${execPath} - Code.exe的路径
  • ${defaultBuildTask} - 默认构建任务的名称

预设变量的示例

 

假设以下情况:

  1.  你在编辑器中打开了文件,文件路径为:/home/your-username/your-project/folder/file.ext;
  2.  你工作空间中的根文件夹为: /home/your-username/your-project

那么每个预设变量的值分别是

  • ${workspaceFolder} - /home/your-username/your-project
  • ${workspaceFolderBasename} - your-project
  • ${file} - /home/your-username/your-project/folder/file.ext
  • ${relativeFile} - folder/file.ext
  • ${relativeFileDirname} - folder
  • ${fileBasename} - file.ext
  • ${fileBasenameNoExtension} - file
  • ${fileDirname} - /home/your-username/your-project/folder
  • ${fileExtname} - .ext
  • ${lineNumber} - line number of the cursor
  • ${selectedText} - text selected in your code editor
  • ${execPath} - location of Code.exe
提示:将鼠标放到tasks.json和launch.json的字符串上时,使用IntelliSense可以获得预定义变量的提示信息。

每个工作区文件夹的变量作用域

环境变量

你也可以通过  ${ env:Name } 语法引用操作系统的环境变量,如:

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",
  "cwd": "${workspaceFolder}",
  "args": ["${env:USERNAME}"]
}

引入配置文件变量

你可以通过  ${config:Name} 语法引入配置文件中的变量例如:${config:editor.fontSize}。

命令变量

    如果上面的预设变量还不能满足需求,你还可以像变量一样使用VS Code的命令,语法:${command:commandID} 。

    当插入命令变量时,将会执行命令,并用该命令的结果(类型为字符串)替换该变量。命令可以是没有UI的简单计算,也可以是基于VS代码的扩展API所提供的具UI特性的一些复杂功能。

An example for this functionality can be found in VS Code's Node.js debugger extension which provides an interactive command extension.pickNodeProcess for selecting a single process from the list of all running Node.js processes. The command returns the process ID of the selected process. This makes it possible to use the extension.pickNodeProcess command in an Attach by Process ID launch configuration in the following way:

    你可以在VS Code的Node.js调试器扩展中找到类似的示例,该示例提供了交互式命令扩展。从所有正在运行的Node.js进程列表中选择单个进程的pickNodeProcess。该命令返回选定进程的进程ID。这使得使用 “ 按进程ID附加启动配置中的pickNodeProcess命令 ” 成为可能。,方法如下:

{
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by Process ID",
      "processId": "${command:extension.pickNodeProcess}"
    }
  ]
}

输入变量

    命令变量已经很强大了,但是它们缺乏一种机制来运行特定的命令。例如,无法将提示信息或默认值传递给命令提示符。

通过使用语法为 ${input:variableID} 的输入变量可以解决这个限制。variableID将关联到launch.json和tasks.json文件中 inputs 部分的条目,可以在 input 部分配置它的其他属性。

以下示例就一个使用输入变量的task.json的大致结构:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "task name",
      //  input变量
      "command": "${input:variableID}"
      // ...
    }
  ],
  "inputs": [  //  input部分
    {   
      // 通过 id 属性与其他部分关联 
      "id": "variableID",  

      //输入变量的类型,目前支持 promptString,pickString,command
      "type": "type of input variable"        
    }
  ]
}

VS Code 目前支持的 input 变量类型:

  • promptString:显示一个输入框接收用户输入。
  • pickString: 显示一个下拉列表,让用户从几个选项中选择。
  • command: 运行任意命令

每种 input 变量类型需要附加的配置属性:

promptString:

  • description: 显示的输入提示信息。
  • default: 指定的默认值,如果用户没有输入的话将使用此默认值。

pickString:

  • description: 显示的输入提示信息。
  • options: 可选项的数组。
  • default: 指定的默认值,如果用户没有输入的话将使用这个默认值,默认值必须是待选项中的一个。

command:

  • command: 在变量插值上运行的命令。
  • args: 运行命令的参数。

以下是一个 tasks.json 的示例,它演示了如何通过 inputs 变量来使用 Angular 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 类型的 input 变量,该配置从特定文件夹中生成所有测试用例的列表,再允许用户从中选择一个测试用例。假设某个扩展提供了extension.mochaSupport.test picker命令,该命令将所有测试用例保存在一个位置,并显示一个picker 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"
    }
  ]
}

怎么测试一个变量的值?

    想知道一个变量在运行中的值的一个最简单的办法就是在控制台输入变量的值。例如:你想知道 ${workspaceFolder}的值是什么, 你可以创建一个像下面这样的 tasks.json 文件,在文件的 command 的值中输入"echo ${workspaceFolder}",然后选择菜单中的Terminal > Run Task 运行 tasks.json 文件

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "echo",
      "type": "shell",
      "command": "echo ${workspaceFolder}"
    }
  ]
}

 翻译自:https://code.visualstudio.com/docs/editor/variables-reference

猜你喜欢

转载自blog.csdn.net/hn_tzy/article/details/104652114