<p>直接结论:用 terminal.integrated.env.* 配置项按平台写入 settings.json 是唯一稳定、跨平台、不依赖 shell 启动逻辑的方式;因其在终端进程启动前注入,优先级高于系统变量,且明确支持 ${env:PATH} 引用原始值实现安全追加,避免路径顺序错乱或覆盖失效。</p>

直接结论:用 terminal.integrated.env.* 配置项,按平台写进 settings.json,是唯一稳定、跨平台、不依赖 shell 启动逻辑的方式。
为什么终端里 npm / python / rustc 找不到命令
VSCode 终端默认以非登录、非交互式方式启动,~/.zshrc、~/.bash_profile、~/.profile 一概不执行——这不是 bug,是 Unix shell 的标准行为。你在 iTerm2 里能跑的命令,在 VSCode 终端里报 command not found,大概率就是 PATH 没继承进来。
- macOS GUI 应用(包括 VSCode)通常只读
~/.zprofile,不是~/.zshrc;确认你 export PATH 的地方是否真被 GUI 环境加载 - Linux 桌面环境(GNOME/KDE)下 VSCode 可能继承桌面会话环境,但不可靠,别赌这个
- Windows 上,即使你改了系统 Path,VSCode 启动时若没从已加载该变量的终端中打开(比如没在 Windows Terminal 里执行
code .),它就看不到 - 验证方法:在 VSCode 终端运行
sh -ic "echo $PATH",和你在系统终端里运行结果对比,不一致就说明没继承
terminal.integrated.env.* 怎么写才真正生效
这个配置项是 VSCode 原生支持的终端环境注入机制,优先级高于系统变量,且在终端进程启动前就注入,不走 shell 初始化流程。
- 必须按平台键写:
terminal.integrated.env.osx(macOS)、terminal.integrated.env.linux(Linux)、terminal.integrated.env.windows(Windows),写错平台名就完全不生效 -
PATH不是覆盖,而是追加到已有值末尾——所以一定要显式引用原始值:"PATH": "/opt/homebrew/bin:${env:PATH}"(macOS/Linux)或"PATH": "C:\Program Files\nodejs;${env:PATH}"(Windows) - Windows 路径中反斜杠要转义(
\)或统一用正斜杠(C:/Program Files/nodejs),否则 JSON 解析失败 - 值为
null表示清除该变量,例如"NODE_ENV": null可用于重置调试污染 - 修改后必须关闭所有终端 tab 再新建,热重载不触发环境重载
要不要用 terminal.integrated.profiles.* 启用登录 shell
如果你重度依赖 oh-my-zsh、nvm、pyenv 或自定义 alias,单纯拼 PATH 不够,这时才考虑 profile 方式——但它有明确代价。
- 启用登录模式(如
"args": ["-l"])会完整执行~/.zprofile和~/.zshrc,但也可能触发重复 source、卡住终端(比如某些 zshrc 里有交互式提示) - Windows 上 Git Bash 要用
--login,不是-l;PowerShell Core 默认就是登录模式,但环境仍来自$PROFILE,不是注册表 - profile 名必须和
terminal.integrated.defaultProfile.*一致,否则新终端不会用你配的;macOS 下系统 zsh 路径是/bin/zsh,Homebrew 安装的是/opt/homebrew/bin/zsh,路径错就静默失败 - 更轻量的替代:新建一个纯环境文件(如
~/.vscode-env),只放几行 export,然后用"args": ["-c", "source ~/.vscode-env && exec zsh -i"]加载,避免整套 shell 初始化开销
其他场景的环境变量别漏掉
terminal.integrated.env.* 只管集成终端,调试器、构建任务、Python 插件各自有独立入口,互不影响。
- 调试器(F5)必须在
.vscode/launch.json的每个configuration下写env字段,environment是旧字段已弃用 - 构建任务(Ctrl+Shift+B)要在
.vscode/tasks.json的对应 task 的options.env里配,漏掉就找不到 gcc/g++/make - Python 插件读
python.envFile(如.env文件),但那是给 Python 进程用的,不影响终端或调试器 - 没有“全局插件”能一劳永逸——所谓环境变量管理插件,只对部分扩展起作用,对终端、调试、任务全部无效
最常被忽略的一点:PATH 顺序决定命令优先级。用 which python 或 where node 查看实际调用路径,别只看 echo $PATH 里有没有那个目录。


















