终端配置文件
终端配置文件是特定于平台的 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
环境变量。有关可用变量的列表,请参阅 变量参考 主题。
通过运行 终端:选择默认配置文件 命令来配置您的默认配置文件,该命令也可以通过新的终端下拉菜单访问。
默认终端配置文件 shell 在 Linux 和 macOS 上默认为 $SHELL
,在 Windows 上默认为 PowerShell。VS Code 将自动检测大多数标准 shell,然后可以将其配置为默认值。
配置配置文件
要创建新的配置文件,请运行 终端:选择默认配置文件 命令并激活 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。
提示: 路径、参数和 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,但不会将其作为适当的配置文件公开,直到它们通过 终端:选择默认配置文件 命令显式配置为止。配置不安全配置文件时,添加之前会有警告
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
Git Bash 的限制 当 VS Code 使用 bash.exe(shell)而不是 git-bash.exe(终端)时,历史记录将不会保留在 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 时,Windows Subsystem for Linux 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** 启动,该 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
,这将从终端的环境中剥离大多数环境变量,除了某些重要的变量(如 HOME
、SHELL
、TMPDIR
等)。
另一个解决方法是在终端中不再运行登录 shell,方法是创建一个终端配置文件,并将它的 args
设置为 []
。如果您选择此方法,您需要确保将配置文件脚本中的所有别名都移动到您的 ~/.bashrc
/~/.zshrc
文件中,因为别名只适用于设置它们的 shell。