现已发布!阅读关于 11 月新增功能和修复的内容。

终端配置文件

终端配置文件是特定于平台的 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 命令来配置您的默认配置文件,该命令也可以通过新的终端下拉菜单访问。

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,然后可以将其配置为默认。

配置配置文件

要创建新配置文件,请运行 Terminal: Select Default Profile 命令,然后激活右侧的配置按钮以基于现有 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,但不会将它们公开为合适的配置文件,直到通过 Terminal: Select Default Profile 命令显式配置它们。配置不安全配置文件时,会在添加之前显示警告。

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 添加为配置文件,请在新的终端下拉菜单中选择 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** 启动,该 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 脚本中,因为 rc 脚本会在非登录 Shell 上运行。

有两种直接的解决方法。第一种是设置 "terminal.integrated.inheritEnv": false,它将从终端环境中剥离大多数环境变量,但保留一些重要的环境变量(如 HOMESHELLTMPDIR 等)。

另一种解决方法是通过创建终端配置文件并将其 args 设置为 [] 来停止在终端中运行登录 Shell。如果您采用此方法,您将需要确保将配置文件脚本中的任何别名移至您的 ~/.bashrc/~/.zshrc 文件,因为别名仅适用于设置它们的 Shell。

© . This site is unofficial and not affiliated with Microsoft.