VSCode终端默认配置需匹配profiles中定义的键名而非路径或显示名;Windows须确保terminal.integrated.defaultProfile.windows与terminal.integrated.profiles.windows中某key完全一致;WSL需手动添加profile且args发行版名须与wsl -l -v输出严格一致;macOS/Linux的defaultProfile应设为绝对路径并重启VSCode生效。

VSCode 默认终端改不了?先确认你改的是哪个配置项
VSCode 的终端行为由两个层级控制:用户级全局设置和工作区级覆盖。很多人改了 terminal.integrated.defaultProfile.windows 却没生效,是因为在 Windows 上真正起作用的是 terminal.integrated.profiles.windows 中定义的 profile 名称,而 defaultProfile 必须严格匹配其中某个 key —— 不是路径,不是显示名,是 profile 对象的键名。
常见错误现象:defaultProfile 设成 "PowerShell" 或 "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" 都无效,因为 profile 键名默认是 "PowerShell"(带空格)或 "Git Bash",但具体取决于你安装的 shell 和 VSCode 版本。
- 打开设置(
Ctrl+,),搜索terminal.integrated.profiles.windows,点击“在 settings.json 中编辑” - 检查当前 profiles 列表,找到你想设为默认的那个 shell 对应的 key,比如
"PowerShell"、"Command Prompt"或"Ubuntu-22.04 (WSL)" - 再搜索
terminal.integrated.defaultProfile.windows,确保它的值和上一步的 key 完全一致(包括大小写和空格)
WSL 作为默认终端时,为什么新窗口还是 cmd?
WSL profile 在 profiles.windows 中默认不启用,需要手动添加。VSCode 不会自动发现已安装的 WSL 发行版,必须显式声明路径和图标等字段,否则 defaultProfile 即使写了 "Ubuntu-22.04" 也会 fallback 到内置的 "Command Prompt"。
实操建议:
- 在
settings.json中补全 WSL profile,例如:"Ubuntu-22.04": { "path": "wsl.exe", "args": ["-d", "Ubuntu-22.04"], "icon": "terminal-linux" } -
args中的发行版名称必须和wsl -l -v输出的名称完全一致(区分大小写) - 如果使用 Windows Terminal 配合 WSL,不要把
path设成wt.exe—— VSCode 终端不支持嵌套启动终端模拟器
Mac/Linux 用户改 terminal.integrated.defaultProfile.osx 没反应?
macOS 和 Linux 上没有 profiles.osx 或 profiles.linux 这个配置项(VSCode 1.85+ 已移除),所有 shell 都通过 shellArgs 和 env 控制,defaultProfile 直接指向可执行文件路径即可。
关键点:
-
terminal.integrated.defaultProfile.osx应设为完整路径,如"/opt/homebrew/bin/fish"或"/bin/zsh",不能只写"fish" - 确保该路径对 VSCode 可见:如果用 Homebrew 安装的 shell,且 VSCode 是从 Dock 启动的,可能读不到
PATH,需用绝对路径 - 修改后必须重启 VSCode(不是重载窗口),否则旧进程仍缓存原 shell
改完配置,新终端还是旧 shell?检查这三件事
最常被忽略的是终端复用机制:VSCode 默认复用已有终端进程,不会因配置变更重新初始化。所以即使配置正确,新开终端也可能沿用旧 session。
- 关闭所有已打开的集成终端(点击终端面板右上角 ×,或运行命令
Terminal: Kill the Active Terminal Instance) - 确认没有在
.vscode/settings.json(工作区)中覆盖了用户级的defaultProfile - 运行命令
Developer: Toggle Developer Tools,在 Console 中输入terminalEnvironment查看当前终端实际加载的 profile 名称
复杂点在于:profile 名称、路径、args、环境变量四者耦合,任意一环错位都会导致 fallback。别只盯着 defaultProfile,先让 profile 能列出来,再让它被选中。











