🚀 在 VS Code 中

終端設定檔

終端設定檔是平台特定的 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 環境變數。《變數參考》主題中提供可用變數的清單。

執行終端: 選取預設設定檔命令來設定您的預設設定檔,此命令也可透過新的終端下拉式選單存取。

Select Default Profile is located at the bottom of the dropdown menu attached to the new terminal button

預設終端設定檔 Shell 在 Linux 和 macOS 上預設為 $SHELL,在 Windows 上預設為 PowerShell。VS Code 會自動偵測大多數標準 Shell,然後可以將其設定為預設值。

設定設定檔

若要建立新的設定檔,請執行終端: 選取預設設定檔命令,然後啟動 Shell 右側的設定按鈕以作為基礎。這會將新項目新增至您的設定,您可以在 settings.json 檔案中手動調整。

可以使用 pathsource 以及一組選用引數來建立設定檔。source 僅在 Windows 上可用,可用於讓 VS Code 偵測 PowerShellGit 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,但在透過終端: 選取預設設定檔命令明確設定之前,不會將其公開為適當的設定檔。設定不安全設定檔時,在新增之前會出現警告

Shells with unsafe paths like c:\msys64 will show a warning before you can use the detected 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 的 Wiki 以取得更多資訊。

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:\cygwinC:\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 新增為設定檔,請在新終端下拉式選單中選擇選取預設設定檔選項,然後選取 Windows PowerShell 項目。這會設定設定檔並將其設定為您的預設值。

WSL

在本機電腦上執行 VS Code 時,應會自動偵測到適用於 Linux 的 Windows 子系統 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。這會鼓勵「不良行為」,例如在您的設定檔腳本中初始化別名,但這些別名應該存在於您的 rc 腳本中,因為該腳本在非登入 Shell 上執行。

有兩種直接的修正方法。第一種是設定 "terminal.integrated.inheritEnv": false,這會從終端機的環境中剝離大多數環境變數,但除了一些重要的變數 (例如 HOMESHELLTMPDIR 等) 除外。

另一種修復方法是不再在終端機中執行登入 Shell,方法是建立終端機設定檔並將其 args 設定為 []。如果您選擇此修復方法,您會想要確定您的設定檔腳本中的任何別名都已移至您的 ~/.bashrc/~/.zshrc 檔案,因為別名僅適用於設定它們的 Shell。