终端配置文件

终端配置文件是平台特定的壳配置,由可执行路径、参数及其他自定义组成。默认情况下,会自动检测多个配置文件,这些配置文件可以进行定制或添加。

示例简介:

{
  "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 上,以及 PowerShell 在 Windows 上。VS Code 会自动检测大多数标准 shell,然后可以配置为默认。

配置配置文件

要创建新配置文件,运行终端选择默认配置文件命令,激活壳体右侧的配置按钮以作为基础。这会在你的设置中添加一个新条目,可以手动调整settings.json档案。

配置文件可以通过以下任一方式创建路径或者资料来源,以及一组可选参数。A资料来源仅在 Windows 上可用,可以用来让 VS Code 检测 以下PowerShellGit Bash.或者,a路径可以直接指向壳级执行文件。以下是一些示例配置文件配置:

{
  "terminal.integrated.profiles.windows": {
    "PowerShell -NoProfile": {
      "source": "PowerShell",
      "args": ["-NoProfile"]
    }
  },
  "terminal.integrated.profiles.linux": {
    "zsh (login)": {
      "path": "zsh",
      "args": ["-l"]
    }
  }
}

其他资料支持的论点包括:

  • 覆盖名称:一个布尔值,表示是否替换动态终端标题,该标题检测运行的程序使用静态配置文件名称。
  • 环境:定义环境变量及其值的映射,将变量设为无效从环境中删除它。这可以通过terminal.integrated.env.<platform>环境。
  • 图标:用于配置文件的图标ID。
  • 颜色: 一个主题色彩ID,用于为图标做样式。
提示

路径、args 和 env 都支持解析变量

默认配置文件可以通过terminal.integrated.defaultProfile.*设定。应设置为现有配置文件的名称:

{
  "terminal.integrated.profiles.windows": {
    "my-pwsh": {
      "source": "PowerShell",
      "args": ["-NoProfile"]
    }
  },
  "terminal.integrated.defaultProfile.windows": "my-pwsh"
}
提示

集成终端壳是在VS Code权限下运行的。如果你需要运行带有提升权限(管理员)或其他权限的shell命令,可以使用平台工具,比如runas.exe在终端内。

移除内置配置文件

要移除内置配置文件并防止它出现在新终端下拉菜单中,请将配置文件名称设置为无效.例如,去除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"
  }
}

配置文件专用键盘快捷键

通过专用键盘快捷键启动具有特定配置文件的终端,可以通过以下方式实现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 仍然会检测这些配置,但在通过终端:选择默认配置文件命令明确配置之前,不会将其暴露为合适的配置文件。在配置不安全配置文件时,添加之前会有一个警告:

像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的维基获取更多信息。

天鹅

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(壳)而非git-bash.exe(终端)时,Git Bash的一个限制是历史不会在壳会话间被保留。你可以通过在你的基础上添加以下内容来绕过这个问题~/.bashrc~/.bash_profile档案:

export PROMPT_COMMAND='history -a'

这会导致壳调用历史 -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 项。这会配置配置文件并将其设置为默认。

女子超级联赛

在本地机器上运行VS Code时,Linux的Windows子系统外壳应该会自动被检测到。根据你的设置,如果你安装了很多发行版,这可能会有点麻烦。为了更细致地控制WSL配置文件,可以通过

terminal.integrated.useWslProfiles
  • 在VS代码中打开
  • 在VS Code Insiders中开放
设置,下面是一个手动配置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,运行你的~/.个人资料/~/.bash_profile/~/.zprofile剧本。现在终端启动时,它也会作为登录壳运行,将标准路径放到前面(例如,/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin)并重新初始化你的壳环境。

为了更好地理解,你可以通过在作系统内置终端内启动内部登录壳来模拟发生的情况:

# 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终端默认都是登录壳运行,因为macOS在用户登录系统时不会运行登录壳。这鼓励了“不良行为”,比如在个人资料脚本中初始化别名,而它们本该存在于你的个人资料中RC脚本就是在非登录shell上运行的。

对此有两个直接的解决办法。第一种是设置“terminal.integrated.inheritEnv”: false该变量将剥离终端环境中的大部分环境变量,仅保留一些重要变量(例如首页,壳牌,TMPDIR,等等)。

另一个解决办法是通过创建终端配置文件并设置其args到。如果你采用这个修复方法,你需要确保配置文件脚本中的所有别名都迁移到了你的[]~/.bashrc/~/.zshrc文件,因为别名只适用于它们设置的壳体。