按下 Ctrl 想跑一条命令蹦出来却是 PowerShell想在 Windows 上切到 Git Bash 执行 shell 脚本还得每次手动点终端面板右侧的下拉箭头。这类场景我在技术群里见过太多次了。VS Code 的默认终端并不是写死的它完全可以通过配置改成 CMD、Git Bash、WSL 的 Ubuntu甚至是自定义路径的第三方终端。这篇内容针对 Windows、macOS、Linux 三个平台梳理了 4 种修改默认终端的方案从纯鼠标操作到直接改 JSON 都覆盖。适合刚上手 VS Code 的新手也适合需要在多台机器间同步配置的开发者。我会把背后的 Profile 机制、配置项的优先级、以及几个改了不生效的典型原因一起讲清楚。1. 先搞清楚默认终端在 VS Code 里到底由谁控制1.1 终端 Profile、Default Profile 和 Profiles 配置块要改默认终端不能只在设置界面里瞎找。VS Code 的集成终端体系里有三个基本概念。第一个是终端配置文件Terminal Profile。它描述终端面板里可启动的某一种 shell包含可执行文件路径、启动参数 args、图标 icon 等内容。简单说一个 Profile 就是一款终端程序 它启动时附带的参数。第二个是默认配置文件Default Profile也就是你在按 Ctrl或点击终端面板加号按钮时VS Code 默认加载的那一个 Profile。第三个是 Profiles 配置块也就是 settings.json 里的terminal.integrated.profiles.windows、.osx、.linux 这些节点它们负责定义当前平台上有哪些可用的 Profile。用生活场景类比Profile 就像一排饮料机的按钮可乐、气泡水、无糖茶Default Profile 就是你随手按默认饮品键时掉出来的那瓶。你真正要改的是默认掉出来的是什么。1.2 平台键名别搞混VS Code 在不同操作系统的 settings.json 中使用不同的键名这是新手最容易翻车的地方。Windows 对应的配置键是terminal.integrated.defaultProfile.windowsmacOS 的键名是terminal.integrated.defaultProfile.osxLinux 的键名是terminal.integrated.defaultProfile.linux注意 macOS 这里虽然设置界面里显示的是 Terminal › Integrated › Default Profile: macOS但 JSON 内部实际的键是osx而不是macos。很多人在这里写错导致配置完全不生效。在 Profiles 定义块里同样要对应用profiles.windows、profiles.osx、profiles.linux。跨平台配置时建议三个键都写上避免换机器后某一平台没有默认值。1.3 常见终端 Profile 及其显示名默认情况下VS Code 会根据操作系统自动发现本机已安装、且能被识别到的终端程序自动在终端下拉列表里列出这些 Profile。下面这张表列出了常见平台的 Profile 显示名方便后续对照配置平台常见 Profile 显示名说明WindowsPowerShellWindows 自带 PowerShell 5.1注意大小写WindowsCommand Promptcmd.exeWindowsGit Bash安装了 Git for Windows 才会出现WindowsUbuntu (WSL) / Debian (WSL)装了 WSL 发行版后出现macOSzsh新版系统默认 shellmacOSbash旧版系统默认 shellLinuxbash / sh / zsh / fish取决于系统已安装的 shell这些显示名其实对应 profile 的name字段或 JSON key。你不需要背这些名字只要在终端面板的下拉列表里看到什么settings.json 里就用什么。唯一要注意的是 PowerShell 的大小写自动发现的 Windows PowerShell 显示名通常是PowerShell不是powershell。写错大小写在部分版本中不会报错但会静默回退到默认终端。2. 方法一用命令面板一条命令搞定2.1 三步完成设置命令面板是 VS Code 里被严重低估的入口。它提供了一个很直接的命令来切换默认终端。操作步骤按 CtrlShiftPmacOS 使用 CmdShiftP打开命令面板。输入Terminal: Select Default Profile回车。在列出的终端列表中选择要设为默认的那一项回车即可。完成之后关闭当前终端面板再重新打开默认启动的终端就变成你选的 Profile 了。2.2 为什么我建议你先用这个方法首先是快。不需要进入设置页、不需要记忆 JSON 键名两秒钟结束。其次这个方法天然避免了拼写错误——你直接选择 VS Code 扫描到的 Profile 名称而不是自己手敲。对于大部分只需要在现有终端里挑一个的用户这已经足够了。我在帮同事排查改了 settings.json 不起作用的问题时至少有一半情况是 JSON 里的 Profile 名称和实际显示名不一致。用命令面板反而不会出现这种问题。2.3 命令面板解决不了的场景命令面板只能选择现有 Profile不能创建新 Profile。如果你的 Git Bash 没被自动发现、或者你想自定义 cmd.exe 的启动参数这个方法没法完成。另外命令面板修改的默认配置会写到用户级设置User Settings中它只能影响当前用户、无法跟进项目配置。如果你需要为某个项目单独指定默认终端还是要靠后面的工作区配置方案。3. 方法二设置界面可视化修改3.1 找到“Default Profile”配置项打开 VS Code 设置Windows/Linux 下按 Ctrl,macOS 下按 Cmd,。然后在设置搜索框里输入default profile很快就能看到 Terminal Integrated Default Profile: Windows 或者 Default Profile: macOS 之类的下拉框。点开下拉框选中你想要的终端保存后关闭面板。这个操作和命令面板选择默认 Profile 的效果本质相同——最终都是写入用户级 settings.json 中的defaultProfile字段。3.2 为什么还要保留设置界面入口有读者可能会问既然命令面板能设置默认终端为什么设置界面里还要再配一遍实际上两者背后改的是同一个配置项只是入口不同。命令面板适合已经明确知道自己要什么的人设置界面则能让不熟悉命令面板的用户通过搜索联想慢慢摸到配置含义。在实际工作中我更倾向于把设置界面当查看当前配置的窗口来用因为它的下拉框里会显示当前生效的 Profile 值。排查改了不生效的问题时打开这一页一眼就能确认最终值是什么比翻 JSON 更直观。3.3 设置界面下拉列表为空或没有想要的终端在 Windows 上最常见的抱怨是下拉列表里只有 PowerShell 和 Command Prompt没有 Git Bash 也没有 WSL。这是因为 VS Code 自动发现终端时依赖 PATH 环境变量和默认安装目录。如果你安装 Git 时没有勾选 Add to PATH或者 WSL 发行版未被正确初始化自动发现就会漏掉它们。此时不用着急可以直接跳到方法三在 settings.json 中手动声明 Profile。声明成功后这个 Profile 会出现在下拉列表中之后你仍然可以用设置界面继续维护默认项。4. 方法三直接编辑 settings.json一劳永逸4.1 打开 JSON 配置文件的两种姿势第一种按 CtrlShiftP 输入Preferences: Open User Settings (JSON)回车。第二种先打开设置界面点击右上角的打开设置(JSON)图标。两种方式打开的都是用户级 settings.json。如果你只是给自己换终端改这个文件就好如果想让整个项目共用统一终端配置则要打开项目根目录下的.vscode/settings.json也就是方法四的内容。4.2 Windows 下最常用的配置示例先给一个最简单、只改默认项的版本。假设 VS Code 能正常识别 Git Bash只需要把默认终端改成它{ terminal.integrated.defaultProfile.windows: Git Bash }如果 VS Code 没能自动识别 Git Bash就要同时补上 Profiles 定义{ terminal.integrated.profiles.windows: { Git Bash: { path: C:\\Program Files\\Git\\bin\\bash.exe } }, terminal.integrated.defaultProfile.windows: Git Bash }这里有两个细节需要注意。第一path 里的反斜杠在 JSON 中必须写成双反斜杠\\写成单反斜杠\会导致 JSON 解析失败或者路径被转义成错误值。不想写双反斜杠的话也可以统一用正斜杠C:/Program Files/Git/bin/bash.exeVS Code 能正常识别。第二如果 Git 安装到了别的盘或自定义目录需要把路径改写成实际位置。不确定路径时打开 Git Bash 输入which bash或echo $PATH找一下。如果你更想用 PowerShell 7pwsh.exe替代系统自带的 Windows PowerShell 5.1配置如下{ terminal.integrated.profiles.windows: { PowerShell 7: { path: C:\\Program Files\\PowerShell\\7\\pwsh.exe } }, terminal.integrated.defaultProfile.windows: PowerShell 7 }如果想把默认终端切到 WSL 里的某个发行版假设发行版名是 Ubuntu{ terminal.integrated.profiles.windows: { Ubuntu (WSL): { path: C:\\Windows\\System32\\wsl.exe, args: [-d, Ubuntu] } }, terminal.integrated.defaultProfile.windows: Ubuntu (WSL) }args数组里的-d表示指定发行版名称。如果你的 WSL 只有一个发行版甚至可以省略 argsVS Code 会自动使用默认的 WSL 发行版。这里顺便提一句很多人在 VS Code 里配置 C/C 编译环境时也喜欢把默认终端切到 Git Bash 或 WSL因为make、gcc、arm-none-eabi-gcc这类工具链在 bash 环境下更好用。配置方式和上面完全一样不需要额外折腾编译器插件问题终端环境统一了编译流程自然顺畅。4.3 macOS 和 Linux 的简版配置macOS 默认终端换成 zsh新版系统默认就是 zsh可以这样写{ terminal.integrated.defaultProfile.osx: zsh }Linux 换成 bash 或 zsh 同理{ terminal.integrated.defaultProfile.linux: bash }如果你装了 fish想把它设为默认需要先定义 profile{ terminal.integrated.profiles.linux: { fish: { path: /usr/bin/fish } }, terminal.integrated.defaultProfile.linux: fish }如果你不确定 shell 的可执行路径可以在系统终端里执行which fish、which zsh命令返回的路径直接填进去即可。4.4 避坑Profile 的 key、name 和 defaultProfile 匹配关系这是设置默认终端最重要的知识点。终端下拉列表显示的名称来自 profile 配置块的字段。如果在 profile 配置里只写了 key比如Git Bash那么下拉列表显示的就是Git BashdefaultProfile 里也写Git Bash。但如果配置里带了name字段{ terminal.integrated.profiles.windows: { gitbash: { name: 自定义 Git Bash, path: C:\\Program Files\\Git\\bin\\bash.exe } } }此时下拉列表显示的是自定义 Git BashdefaultProfile 也应该写成自定义 Git Bash而不是gitbash。VS Code 匹配 defaultProfile 时优先使用name字段其次才是 JSON key。实践中最稳妥的策略是不要给 key 和 name 设置不同的值除非你非常清楚自己在做什么。否则很容易出现我明明配了 gitbash下拉列表里也叫 gitbash可就是不生效的怪问题。4.5 给 cmd.exe 附加启动参数有些老项目需要 cmd.exe 一启动就切换到 UTF-8 代码页或者执行一段初始化脚本。这时候可以在 Profile 里加 args{ terminal.integrated.profiles.windows: { CMD (UTF-8): { path: C:\\Windows\\System32\\cmd.exe, args: [/k, chcp 65001] } }, terminal.integrated.defaultProfile.windows: CMD (UTF-8) }/k表示执行完命令后保持窗口不关闭。这个技巧在跑中文路径或处理各种编码异常时非常管用很多埋着头改代码的乱码问题其实根子在终端代码页。5. 方法四工作区级配置让不同项目用不同终端5.1 什么时候需要工作区级配置如果你只在自己电脑上开发方法一到方法三已经够用。但对协作项目来说工作区配置的价值就出来了。例如项目 A 的构建脚本是 shell 脚本统一让团队都用 Git Bash 或 WSL 跑项目 B 需要特定 PowerShell 模块默认终端固定为 pwsh 7。如果靠每个人各自改用户配置换个环境就崩。把默认终端写进项目的.vscode/settings.json团队克隆下来后不用额外设置VS Code 就会用项目自己的默认终端工作。5.2 配置方法与示例在 VS Code 里打开项目根目录新建或编辑.vscode/settings.json写入配置。写法与用户级配置完全一样只是作用范围不同。比如{ terminal.integrated.defaultProfile.windows: Git Bash, terminal.integrated.profiles.windows: { Git Bash: { path: C:\\Program Files\\Git\\bin\\bash.exe } } }这里有个很实际的建议把类似path这种依赖本机目录的配置放到用户级把不依赖环境的配置如defaultProfile名称放到工作区级能最大程度保证换机器时可复用。如果团队统一约定环境且目录一致直接把 path 写进.vscode/settings.json也没有问题只是记得在 README 里注明。5.3 配置的优先级Remote Workspace User涉及多个配置来源时VS Code 有一套优先级规则默认内置值优先级最低用户设置User Settings覆盖默认值工作区设置Workspace Settings覆盖用户设置远程设置Remote Settings比如 Remote-SSH 窗口中的设置优先级最高。换句话说当项目里已经写了defaultProfile.windows时你就算把用户级设置改成别的当前项目中打开的终端也不会听你的。排查改了不生效的问题时第一件事就是确认是不是被更高优先级的配置盖住了。6. 常见问题与排查技巧实录6.1 改了默认终端但重新打开还是老样子这是出现频率最高的一个问题。排查顺序建议如下。第一区分已经打开的终端和新建的终端。默认终端配置只对新打开的终端生效已经停留在面板里的旧终端不会切换。关闭旧终端重新按 Ctrl 或点击加号新建一个终端再看效果。第二检查配置层级。工作区设置会覆盖用户设置。如果项目根目录.vscode/settings.json里已经写了默认终端你在用户设置里改多少遍都没用必须改工作区设置或删除该配置。第三确认平台键名。在 Windows 上要写windows在 macOS 上写osx而不是macos在 Linux 上写linux。写错键名并不会报错只会静默失效。第四检查 Profile 名称的匹配关系。defaultProfile 里填的名称必须与 Profiles 配置块的可展示名称一致若有name字段则使用name否则使用 key。名称不匹配时 VS Code 会回退到自动发现的第一个 Profile看起来就像改了没生效。6.2 终端下拉列表里找不到 Git Bash / WSL / pwsh优先确认是否安装并成功加入 PATH。Git for Windows 安装时有一个选项 Use Git from the Windows Command Prompt如果没勾选bash.exe 不会被放进 PATHVS Code 自然扫描不到。此时最简单的做法是重装 Git 并在安装向导里勾选该项然后重启 VS Code。不想重装的也可以在 settings.json 中手动声明 profile指定 bash.exe 完整路径。WSL 发行版未被识别的原因通常是发行版未完成初始化需要至少运行过一次 wsl.exe 并设置 Linux 用户名/密码或者 VS Code 尚未触发 WSL 扫描。让发行版正常启动一次重启 VS Code 后再看下拉列表。PowerShell 7 如果安装在非标准目录自动发现也可能失败手动声明 profile 永远是兜底方案。6.3 我只想临时用一次别的终端不想改默认完全没必要改默认。终端面板右上角的下拉箭头或加号图标旁的下拉箭头打开后可以直接选择任意 Profile 开会话。另一个常用做法是给某个 Profile 绑定专属快捷键在 keybindings.json 中为新建终端的 profile 指定 keybind。比如我习惯用 Git Bash 跑自动化脚本但默认终端继续用 PowerShell就单独给 Git Bash 新建终端 绑了一个键。顺手说一句在终端里跑 claude code 或 cc switch 这类交互型 CLI 工具时我倾向于锁定在一个固定 Profile避免因为 shell 环境不同导致 PATH 不一致装好的工具换个 shell 就找不到。6.4 远程开发Remote-SSH场景下的终端坑如果你通过 Remote-SSH 连到一台 Linux 服务器在本地 Windows 设置里配置defaultProfile.windows是管不到远程终端的。因为远程窗口加载的是远程机器上的设置。常见表现是本地已经改成 Git Bash连上远程开发窗口后终端还是 bash。正确处理方式是在远程窗口中打开命令面板执行Preferences: Open Remote Settings设置terminal.integrated.defaultProfile.linux或在远程工作区的.vscode/settings.json里写入。如果出现正在使用 scp 将 VS Code Server 复制到主机后长时间卡住或提示无法下载 VS Code Serverfailed to fetch那是远程环境连接问题和默认终端没有直接关系。排查时需要分别检查本地网络、远程机器的外网连通性以及远程机器上是否有足够权限写入 VS Code Server 缓存目录。评论区经常把这类远程问题混在终端设置话题里问本质上不是同一个问题。6.5 旧配置项 terminal.integrated.shell.windows 为什么不生效搜索如何修改 VS Code 默认终端时还会看到大量旧博客教人配置terminal.integrated.shell.windows或shellArgs.windows。这两个配置项在新版 VS Code 中已经被弃用不再生效。在 1.60 版本之后终端配置全面迁移到 profiles 体系用terminal.integrated.profiles.windows加terminal.integrated.defaultProfile.windows替代。如果你正在使用 2023 年以后更新的 VS Code看到旧资料里的 shell 配置可以直接忽略。迁移时只需要把原来的 shell 路径写进 profiles 块的path原 shellArgs 写进args数组即可。6.6 关于“把默认终端开关用在系统文件关联上”的提醒有些用户看到默认终端会联想到双击 .bat 文件时用哪个终端打开。这两者不是一回事。VS Code 集成终端的默认配置只影响 VS Code 内部的终端会话Windows 系统里双击 .bat 文件默认使用的打开程序是由系统文件关联控制的需要去设置 → 应用 → 默认应用或右键 → 打开方式里自行选择。在 VS Code 里把默认终端改成 CMD 或 PowerShell并不会让系统双击 .bat 的行为发生变化。这个边界搞清楚能省掉很多不必要的尝试。个人经验里最顺手的一套做法是日常用命令面板选默认 Profile遇到特殊项目就补一个工作区级配置真正需要自定义启动参数时才直接写 settings.json。另外有个小技巧终端面板加号旁边有个小箭头下拉里会列出所有 Profile弹出的菜单里还挂着默认配置文件的入口点进去可以快速跳转。最后提醒一句——改完配置记得关掉旧终端再重开不然很容易误以为没生效。