终端简介

终端配置文件是特定于平台的 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$SHELL在 Linux 和 macOS 上默认为默认,在 Windows 上默认为 PowerShell。VS Code 将自动检测大多数标准 shell,然后将其配置为默认值。

配置配置文件

要创建新的配置文件,请运行终端:选择默认配置文件命令并激活 shell 右侧的配置按钮作为其基础。这将为您的设置添加一个新条目,可以在文件中手动调整该条目settings.json

可以使用 apath或 asource以及一组可选参数来创建配置文件。Asource仅在 Windows 上可用,可用于让 VS Code 检测 或 的PowerShell安装Git Bash。或者,path可以使用直接指向 shell 可执行文件的方式。以下是一些配置文件配置示例:

{
  "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。例如,要删除Git BashWindows 上的配置文件,请使用以下设置:

{
  "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"
  }
}

不安全的个人资料检测

默认情况下,某些 shell 安装在不安全的路径中,例如 Windows 环境中其他用户可以写入的路径。VS Code 仍会检测这些,但不会将它们公开为正确的配置文件,直到通过“终端:选择默认配置文件”命令显式配置它们。配置不安全的配置文件时,在添加之前会出现警告:

具有不安全路径(例如 c:\msys64)的 shell 将在您使用检测到的配置文件之前显示警告

指挥者

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 本身是一个终端,但您可以通过以下配置文件在 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 重击

当 VS Code 使用 bash.exe(shell)而不是 git-bash.exe(终端)时,Git Bash 的一个限制是不会跨 shell 会话保留历史记录。~/.bashrc您可以通过将以下内容添加到您的或文件中来解决此问题~/.bash_profile

export PROMPT_COMMAND='history -a'

这将导致 shellhistory -a在打印提示时调用,将会话的当前会话命令刷新到后备历史文件中。

系统2

MSYS2 的 bash shell 可以使用以下配置文件进行配置:

{
  "terminal.integrated.profiles.windows": {
    "bash (MSYS2)": {
      "path": "C:\\msys64\\usr\\bin\\bash.exe",
      "args": ["--login", "-i"]
    }
  }
}

当安装在默认路径时,该配置文件应该被自动检测为不安全配置文件C:\\msys64

Windows PowerShell

安装 PowerShell 6+ 后,默认情况下 Windows PowerShell 不包含在配置文件列表中。要将 Windows PowerShell 添加为配置文件,请在新终端下拉列表中选择“选择默认配置文件”选项,然后选择 Windows PowerShell 项。这将配置配置文件并将其设置为默认值。

世界SL

在本地计算机上运行 VS Code 时,应自动检测适用于 Linux shell 的 Windows 子系统。根据您的设置,如果您安装了很多发行版,这可能会很麻烦。为了更好地控制 WSL 配置文件,可以通过设置禁用自动检测terminal.integrated.useWslProfiles,下面是如何手动配置 WSL shell 的示例:

{
  "terminal.integrated.profiles.windows": {
    "Debian (WSL)": {
      "path": "C:\\WINDOWS\\System32\\wsl.exe",
      "args": [
        "-d",
        "Debian"
      ]
    }
  }
}

常见问题

为什么终端的$PATH环境变量中有重复的路径和/或为什么它们在 macOS 上是相反的?

由于终端如何使用 VS Code 环境启动,因此在 macOS 上可能会发生这种情况。当 VS Code 第一次启动时,为了获取“开发环境”,它会启动配置好的 shell 作为登录shell,运行您的~/.profile//脚本。现在,当终端启动时,它也作为登录 shell 运行,这会将标准路径放在前面(例如,)并重新初始化您的 shell 环境。~/.bash_profile~/.zprofile/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

为了更好地理解,您可以通过在操作系统的内置终端中启动内部登录 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等)。

args另一个修复是通过创建终端配置文件并将其设置为,不再在终端中运行登录 shell []。如果您进行此修复,您将需要确保配置文件脚本中的所有别名都移至您的~/.bashrc/~/.zshrc文件,因为别名仅适用于它们设置的 shell。