终端默认 shell 不生效需检查 settings.json 中 terminal.integrated.defaultprofile.windows 键名是否正确、值是否为已注册 profile 名(如 "powershell")、保存后须关闭所有终端再新建;powershell 执行策略问题应加 args ["-executionpolicy", "bypass", "-noexit"];wsl 默认 shell 要用完整发行版 id(如 "ubuntu-22.04");启动慢可禁用 environmentchangesenabled。

终端默认 Shell 不生效?检查 settings.json 里 terminal.integrated.defaultProfile.windows 是否写错
VSCode 的终端默认 Shell 设置在 Windows 上不生效,最常见的原因是键名拼写错误或平台判断失效。Windows 下必须用 terminal.integrated.defaultProfile.windows,而不是通用的 terminal.integrated.defaultProfile(后者在新版中已弃用)。如果写错,VSCode 会静默忽略,终端照旧打开 cmd。
- 打开设置界面 → 右下角点「打开设置 (JSON)」,直接编辑
settings.json - 确认写的是
"terminal.integrated.defaultProfile.windows",不是.linux或.osx(即使你用 WSL) - 值必须是已注册 profile 的
name字符串,比如"PowerShell"、"Git Bash",不能写路径或命令 - 改完保存后,**关掉所有终端 tab,再新建一个**——已有终端不会自动切换
PowerShell 启动报错 “Execution Policy”?别改系统策略,只对 VSCode 终端临时绕过
PowerShell 默认执行策略(如 Restricted)会阻止脚本加载,导致 profile.ps1 失效或报红字错误。但没必要全局调成 RemoteSigned,那会降低安全性。
- 在
settings.json中给 PowerShell profile 加上args参数:"args": ["-ExecutionPolicy", "Bypass", "-NoExit"]
-
-ExecutionPolicy Bypass只影响当前进程,不影响系统策略 -
-NoExit很关键:否则 PowerShell 执行完策略就退出,终端闪退 - 注意:如果用了 ConPTY(VSCode 1.78+ 默认),某些老版本 PowerShell 2.0 会卡住,建议至少用 PowerShell 5.1+
WSL Bash 怎么设为默认?别选 “Ubuntu” 名字,要认准 Ubuntu-22.04 这类完整 ID
WSL 安装多个发行版(比如 Ubuntu-22.04、Debian、Alpine)后,VSCode 自动识别的 profile name 是带版本号的全名,不是菜单里显示的“Ubuntu”。选错名字会导致终端启动失败或回退到 cmd。
- 先在 VSCode 终端右上角下拉菜单里点「Select Default Profile」,看哪些选项实际可用
- 把看到的完整名字(如
Ubuntu-22.04、Debian)复制进settings.json的terminal.integrated.defaultProfile.windows - 不要写
wsl.exe -d Ubuntu这种命令 —— VSCode 的 profile 机制不支持自定义命令行,只接受预注册的 profile - 如果没看到你的发行版,运行
wsl -l -v确认状态,STATE必须是Running,否则 VSCode 不加载
终端启动慢或卡住?关掉 terminal.integrated.environmentChangesEnabled
VSCode 默认会在每次新建终端时读取 shell profile(如 $PROFILE、~/.bashrc),并对比环境变量变化。这个过程在 PowerShell 或复杂 Bash 配置下可能卡顿数秒,甚至假死。
- 在
settings.json加一行:"terminal.integrated.environmentChangesEnabled": false
- 关掉后,终端启动快了,但 VSCode 不再监听 shell 里
export的变量变更(比如你在终端里改了PATH,VSCode 的任务/调试器看不到) - 日常开发基本不需要实时同步,除非你重度依赖终端内动态改环境再触发构建
- 该选项不影响
args或 profile 加载逻辑,只是省掉一次 diff 步骤
settings.json 里那一行精确匹配的键和值;很多问题其实不是 VSCode 不支持,而是 profile 名字没对上、参数少了个 -NoExit、或者环境检测多跑了一次。











