终端配置文件
终端配置文件是特定于平台的 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,然后将其配置为默认值。
配置终端配置文件
要创建新配置文件,请运行 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 的 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:\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 时,应自动检测到适用于 Linux 的 Windows 子系统 (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 脚本中,因为后者在非登录 Shell 上运行。
对此有两个直接的修复方法。第一种是设置 "terminal.integrated.inheritEnv": false,这将从终端环境中剥离大多数环境变量,仅保留一些重要的变量(如 HOME、SHELL、TMPDIR 等)。
另一种修复方法是通过创建终端配置文件并将 args 设置为 [],从而不再在终端中运行登录 Shell。如果你选择此修复方法,请确保将 Profile 脚本中的任何别名移至你的 ~/.bashrc/~/.zshrc 文件中,因为别名仅适用于设置它们的 Shell。