VSCode终端默认以非登录、非交互模式启动shell,故不加载~/.zshrc等配置文件;需通过terminal.integrated.profiles.*显式配置"args": ["-i", "-l"](macOS/Linux)或["--login", "-i"](Git Bash)使其正确加载环境。

VSCode 本身不“集成外部 Shell”,而是调用你系统里已安装的 Shell 可执行文件——关键在于让它正确加载你的环境配置,而不是只启动一个空壳。
terminal.integrated.profiles.* 必须显式定义,不能只改 defaultProfile
很多人只改 terminal.integrated.defaultProfile.windows 或 terminal.integrated.defaultProfile.osx,结果终端还是不认 nvm、conda、direnv。这是因为 VSCode 默认以非登录、非交互模式启动 Shell(比如直接跑 zsh),跳过了 ~/.zshrc 加载。
- 必须同时定义
terminal.integrated.profiles.*,并在其中指定"args": ["-i", "-l"](-i表示 interactive,-l表示 login) - Windows 上 Git Bash 要用
"args": ["--login", "-i"],PowerShell Core 推荐"args": ["-NoExit", "-Command", ". $PROFILE"] - 路径别硬写
/bin/zsh;用"path": "zsh"更健壮,它会走$PATH查找 - 改完配置后,关掉所有终端 tab,再按
Ctrl+`—— 不是刷新,是重启进程
终端不加载 ~/.zshrc 的根本原因不是 VSCode,而是 shell 启动模式
运行 echo <p>运行 <code>echo $0 看当前 shell 名(通常是 -zsh 或 zsh),再运行 ps -o args= $$ 看实际启动命令。如果没带 -i 或 -l,那它就不会读 ~/.zshrc。
-zsh 或 zsh),再运行 ps -o args= $$ 看实际启动命令。如果没带 -i 或 -l,那它就不会读 ~/.zshrc。
-
~/.zshenv总是会被读,但优先级最低,别把export PATH放这儿 -
~/.zshrc只在交互式 shell 中加载,所以-i不可少 - macOS 上若用
~/.zprofile设置PATH,要确保 VS Code 是从终端用code .启动,否则桌面图标启动时不会继承该文件里的变量 - Linux Snap 版 VS Code 因沙盒限制无法读
~/.bashrc,换.deb或 tarball 版本
PATH 和命令找不到?先验证终端是否真继承了你的环境
别急着改 VS Code 配置,先确认问题出在哪层:是 VS Code 没传环境,还是 shell 没加载配置,还是 PATH 本身就有误。
- 运行
env | grep PATH,对比终端输出和你在系统终端里跑的结果 —— 差多少,问题就卡在哪 -
terminal.integrated.inheritEnv默认为true,但它只继承 VS Code 启动那一刻的环境变量,不重载 shell 配置文件 - 想临时补救:在终端里手动
source ~/.zshrc;长期方案是 profile 里加-i -l,或 Windows 上用"args": ["-c", "source ~/.bashrc && exec bash"] - WSL 用户注意:
wsl.exe -d Ubuntu启动的是 login shell,但 VS Code 默认不加-e参数,建议 profile 里明确写"args": ["-d", "Ubuntu", "-e", "zsh", "-i", "-l"]
最常被忽略的点:终端标签页之间环境完全独立,一个 tab 里 source 了,另一个 tab 还是空的;而多根工作区下,新终端默认进第一个文件夹,不是你正在编辑的文件所在目录 —— 这些都不是 bug,是 shell 进程和 VS Code 工作区模型的自然行为。


















