https://code.visualstudio.com/docs/editor/variables-reference#_common-questions
Visual Studio Code在調試和任務配置文件以及某些選擇設置中支持變量替換。使用$ {variableName}
語法在鍵和值字符串launch.json
以及tasks.json
文件中支持變量替換。
預定義變量
- 支持以下預定義變量:
${workspaceRoot}
-VSCode中打開文件夾的路徑 the path of the folder opened in VS Code
$ {workspaceFolder}
-在VS Code中打開的文件夾的路徑
$ {workspaceFolderBasename}
-在VS Code中打開的文件夾名稱,不帶任何斜槓(/)
$ {file}
-當前打開的文件
$ {relativeFile}
-相對於當前打開的文件workspaceFolder
$ {relativeFileDirname}
-相對於當前打開的文件的目錄名workspaceFolder
$ {fileBasename}
-當前打開的文件的基本名稱
$ {fileBasenameNoExtension}
-當前打開的文件的基本名稱,沒有文件擴展名
$ {fileDirname}
-當前打開的文件的目錄名
$ {fileExtname}
-當前打開的文件的擴展名
$ {cwd}
-啓動時任務運行器的當前工作目錄
$ {lineNumber}
-活動文件中當前選擇的行號
$ {selectedText}
-活動文件中的當前選定文本
$ {execPath}
-正在運行的VS Code可執行文件的路徑
$ {defaultBuildTask}
-默認構建任務的名稱 - 預定義變量的例子
假設您具有以下要求:
- 位於
/home/your-username/your-project/folder/file.ext
您的編輯器中打開的文件; - 目錄
/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} -光標的行號
$ {selectedText} -在代碼編輯器中選擇的文本
$ {execPath} -Code.exe的位置
提示:在
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"
}
]
}
常見問題
- 用戶和工作區設置中是否支持變量替換?
預定義變量在選定數量的設定鍵的被支持settings.json的文件,如終端cwd,env,shell和shellArgs的值。一些[settings](https://code.visualstudio.com/docs/getstarted/settings)像
window.title`一樣有自己的變量:
"window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${appName}"
請參閱“設置”編輯器(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}"
}
]
}