終端配置檔案
終端配置檔案是特定於平臺的 shell 配置,由可執行檔案路徑、引數和其他自定義項組成。預設情況下,系統會自動檢測到幾個配置檔案,您可以對其進行自定義或新增。
配置檔案示例
{
"terminal.integrated.profiles.windows": {
"Custom Init": {
"path": "pwsh.exe",
"args": [
"-noexit",
"-file",
"${env:APPDATA}\\PowerShell\\custom-init.ps1"
]
}
},
"terminal.integrated.defaultProfile.windows": "Custom Init"
}
您可以在終端配置檔案中使用變數,如上例中的 APPDATA
環境變數所示。在變數參考主題中,有一個可用變數的列表。
透過執行 終端: 選擇預設配置檔案 (Terminal: Select Default Profile) 命令來配置您的預設配置檔案,該命令也可透過新建終端的下拉選單訪問。
預設終端配置檔案的 shell 在 Linux 和 macOS 上預設為 $SHELL
,在 Windows 上預設為 PowerShell。VS Code 會自動檢測大多數標準 shell,然後可以將其配置為預設 shell。
配置配置檔案
要建立新的配置檔案,請執行 終端: 選擇預設配置檔案 (Terminal: Select Default Profile) 命令,並激活您想作為基礎的 shell 右側的配置按鈕。這將在您的設定中新增一個新條目,您可以在 settings.json
檔案中手動調整。
配置檔案可以使用 path
或 source
建立,以及一組可選引數。source
僅在 Windows 上可用,可用於讓 VS Code 檢測 PowerShell
或 Git Bash
的安裝。或者,也可以使用直接指向 shell 可執行檔案的 path
。以下是一些配置檔案示例:
{
"terminal.integrated.profiles.windows": {
"PowerShell -NoProfile": {
"source": "PowerShell",
"args": ["-NoProfile"]
}
},
"terminal.integrated.profiles.linux": {
"zsh (login)": {
"path": "zsh",
"args": ["-l"]
}
}
}
配置檔案支援的其他引數包括:
overrideName
:一個布林值,指示是否用靜態的配置檔名稱替換用於檢測正在執行的程式的動態終端標題。env
:一個定義環境變數及其值的對映表,將變數設定為null
可將其從環境中刪除。這可以透過terminal.integrated.env.<platform>
設定為所有配置檔案進行配置。icon
:用於配置檔案的圖示 ID。color
:用於設定圖示樣式的主題顏色 ID。
提示: Path、args 和 env 都支援解析變數。
預設配置檔案可以使用 terminal.integrated.defaultProfile.*
設定手動定義。這應設定為現有配置檔案的名稱。
{
"terminal.integrated.profiles.windows": {
"my-pwsh": {
"source": "PowerShell",
"args": ["-NoProfile"]
}
},
"terminal.integrated.defaultProfile.windows": "my-pwsh"
}
提示: 整合終端 shell 是以 VS Code 的許可權執行的。如果您需要使用提升的(管理員)或不同的許可權執行 shell 命令,請在終端內使用平臺實用程式,例如
runas.exe
。
移除內建配置檔案
要移除內建配置檔案並防止其顯示在新建終端的下拉選單中,請將配置檔名稱設定為 null
。例如,要在 Windows 上移除 Git Bash
配置檔案,請使用此設定:
{
"terminal.integrated.profiles.windows": {
"Git Bash": null
}
}
配置任務/除錯配置檔案
預設情況下,任務/除錯功能將使用預設配置檔案。如果您的預設配置檔案有繁重的 PowerShell 啟動指令碼或非 POSIX 相容的 shell,這可能並不理想。要配置一個僅在除錯/任務功能中使用的配置檔案,請使用 terminal.integrated.automationProfile.<platform>
設定。
{
"terminal.integrated.defaultProfile.osx": "fish",
// Use a fully POSIX-compatible shell and avoid running a complex ~/.config/fish/config.fish
// for tasks and debug
"terminal.integrated.automationProfile.osx": {
"path": "/bin/sh"
}
}
特定於配置檔案的鍵盤快捷鍵
透過專用的鍵盤快捷鍵以特定配置檔案啟動終端,可以使用 workbench.action.terminal.newWithProfile
命令來完成。此命令接受配置檔名稱和可選的位置作為引數。例如,要將 Ctrl+Shift+T 繫結到開啟一個使用 zsh
配置檔案的終端:
{
"key": "ctrl+shift+t",
"command": "workbench.action.terminal.newWithProfile",
"args": {
"profileName": "zsh",
"location": "editor"
}
}
不安全的配置檔案檢測
某些 shell 預設安裝在不安全的路徑中,例如在 Windows 環境下可能被其他使用者寫入的路徑。VS Code 仍然會檢測到這些 shell,但在透過 終端: 選擇預設配置檔案 (Terminal: Select Default Profile) 命令明確配置之前,不會將它們作為正式的配置檔案公開。在配置不安全的配置檔案時,新增前會有一個警告。
Cmder
Cmder 本身是一個終端,但您可以在 VS Code 中使用 Cmder shell,配置如下:
{
"terminal.integrated.profiles.windows": {
"cmder": {
"path": "C:\\WINDOWS\\System32\\cmd.exe",
"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode_init.cmd"]
}
},
"terminal.integrated.defaultProfile.windows": "cmder"
}
當設定了 CMDER_ROOT
環境變數時,此配置檔案應被自動檢測到。如果安裝在 C:\cmder
,它也會被檢測為不安全的配置檔案。您可以參考 Cmder 的維基獲取更多資訊。
Cygwin
Cygwin 本身是一個終端,但您可以在 VS Code 中使用 Cygwin shell,配置如下:
{
"terminal.integrated.profiles.windows": {
"Cygwin": {
"path": "C:\\cygwin64\\bin\\bash.exe",
"args": ["--login"]
}
},
"terminal.integrated.defaultProfile.windows": "Cygwin"
}
當安裝在預設路徑 C:\cygwin
或 C:\cygwin64
時,此配置檔案應被自動檢測為不安全的配置檔案。
Git Bash
當 VS Code 使用 bash.exe(shell)而不是 git-bash.exe(終端)時,Git Bash 的一個限制是歷史記錄不會在 shell 會話之間保留。您可以透過將以下內容新增到您的 ~/.bashrc
或 ~/.bash_profile
檔案中來解決此問題:
export PROMPT_COMMAND='history -a'
這將導致 shell 在每次列印提示符時呼叫 history -a
,從而將當前會話的命令重新整理到後臺歷史記錄檔案中。
MSYS2
MSYS2 的 bash shell 可以透過以下配置檔案進行配置:
{
"terminal.integrated.profiles.windows": {
"bash (MSYS2)": {
"path": "C:\\msys64\\usr\\bin\\bash.exe",
"args": ["--login", "-i"],
"env": { "CHERE_INVOKING": "1" }
}
}
}
CHERE_INVOKING
環境變數用於告訴登入初始化指令碼保留工作目錄,而不是在 $HOME
目錄開啟。
當安裝在預設路徑 C:\\msys64
時,此配置檔案應被自動檢測為不安全的配置檔案。
Windows PowerShell
當安裝了 PowerShell 6+ 時,Windows PowerShell 預設不包含在配置檔案列表中。要將 Windows PowerShell 新增為配置檔案,請在新建終端下拉選單中選擇 選擇預設配置檔案 (Select Default Profile) 選項,然後選擇 Windows PowerShell 項。這將配置該配置檔案並將其設定為您的預設項。
WSL
當您在本地計算機上執行 VS Code 時,Windows Subsystem for Linux (WSL) 的 shell 應該會被自動檢測到。如果您安裝了許多發行版,根據您的設定,這可能會很麻煩。為了更好地控制 WSL 配置檔案,可以使用 terminal.integrated.useWslProfiles 設定停用自動檢測,然後下面是一個如何手動配置 WSL shell 的示例:
{
"terminal.integrated.profiles.windows": {
"Debian (WSL)": {
"path": "C:\\WINDOWS\\System32\\wsl.exe",
"args": [
"-d",
"Debian"
]
}
}
}
常見問題
為什麼終端的 $PATH
環境變數中存在重複的路徑,和/或為什麼它們在 macOS 上是反向的?
這種情況可能發生在 macOS 上,這是因為終端使用 VS Code 的環境啟動的方式。當 VS Code 首次啟動時,為了獲取您的“開發環境”,它會以登入 shell 的形式啟動您配置的 shell,這會執行您的 ~/.profile
/~/.bash_profile
/~/.zprofile
指令碼。現在,當終端啟動時,它也作為登入 shell 執行,這會將標準路徑(例如 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
)放在前面,並重新初始化您的 shell 環境。
為了更好地理解,您可以在作業系統的內建終端中啟動一個內部登入 shell 來模擬正在發生的事情:
# Add /test to the beginning of $PATH
export PATH=/test:$PATH
# Echo $PATH, /test should be at the beginning
echo $PATH
# Run bash as a login shell
bash -l
# Echo $PATH, the values should be jumbled
echo $PATH
不幸的是,與 Linux 不同,獨立的 macOS 終端預設都作為登入 shell 執行,因為當用戶登入系統時,macOS 不會執行登入 shell。這鼓勵了“不良行為”,例如在您的 profile 指令碼中初始化別名,而這些別名本應放在您的 rc
指令碼中,因為 rc
指令碼在非登入 shell 中執行。
對此有兩個直接的修復方法。第一個是設定 "terminal.integrated.inheritEnv": false
,這將從終端環境中剝離大多數環境變數,除了一些重要的變數(如 HOME
、SHELL
、TMPDIR
等)。
另一個修復方法是透過建立一個終端配置檔案並將其 args
設定為 []
,從而不再在終端中執行登入 shell。如果您採用此修復方法,您需要確保將 profile 指令碼中的任何別名移動到您的 ~/.bashrc
/~/.zshrc
檔案中,因為別名僅適用於設定它們的 shell。