直接设terminal.integrated.cwd为${workspacefolder}是唯一可靠方案;vscode终端默认继承系统shell路径(如$home),不会自动识别项目根目录,必须通过“file → open folder”显式打开工作区,且配置仅对新建终端生效,旧终端需手动关闭后重建。

直接设 terminal.integrated.cwd 为 "${workspaceFolder}" 就行,这是唯一可靠、跨平台、且适配多根工作区的方案。
为什么终端不自动进项目根目录?
VSCode 终端默认继承系统 shell 的启动路径(比如 $HOME 或 %USERPROFILE%),不是“智能跟随当前文件夹”。它根本不会读你刚双击打开的文件位置,也不会看你编辑器里正打开哪个文件——除非你明确通过 File → Open Folder 打开一个文件夹,VSCode 才会把它识别为工作区根。
- 没用
Open Folder,只打开了单个文件 →${workspaceFolder}为空,配置退化为未设置,终端 fallback 到用户主目录 - 用了
Open Folder但没配terminal.integrated.cwd→ 终端大概率还是进用户主目录(尤其 Windows 上 Git Bash 等 shell 有自己默认行为) - 配了但填了
"${fileDirname}"→ 该变量在终端启动瞬间无活动文件可取,被当字面字符串处理,路径无效,最终也落到用户主目录
怎么写才真正生效?
必须在 settings.json 里写对格式,且区分用户级和工作区级:
- 推荐优先写在项目根目录下的
.vscode/settings.json中:"terminal.integrated.cwd": "${workspaceFolder}" - Windows 路径别写
C:myproject,要写成"C:/my/project"或"C:\my\project",否则 JSON 解析失败 - 值不能是空字符串
"",也不能是null,否则等同于未配置 - 如果同时在用户设置和工作区设置里都写了,工作区级会覆盖用户级——这是你控制不同项目不同路径的关键
改完为啥终端没变?
因为 terminal.integrated.cwd 只在点击 + 或按 Ctrl+Shift+` 新建终端时读取一次,已有终端完全不受影响。
- 已打开的终端不会自动跳转,也不会响应配置变更
- 关闭旧终端(点垃圾桶图标),再新建一个,才能看到效果
- 如果你习惯用快捷键反复触发
Ctrl+Shift+`,它每次都是新建,所以一定走新配置 - 右上角显示的路径才是真实工作目录,别只信 shell 提示符前缀——zsh 主题或 oh-my-zsh 可能掩盖实际路径
多根工作区下路径怎么算?
${workspaceFolder} 指的是「当前活动编辑器所属的那个根」,不是所有根拼起来,也不是第一个根。
- 开了 A、B 两个文件夹,当前标签页里打开的是
B/src/index.ts→ 新终端起始路径就是 B 的绝对路径 - 当前标签页是空的、或者打开的是未归属任何根的临时文件 →
${workspaceFolder}无法解析,终端 fallback 到用户主目录 - Git Bash 用户额外注意:如果它的启动参数含
--cd-to-home,会覆盖 VSCode 设置,需在终端 profile 配置里禁用该参数
最易被忽略的其实是「必须先 Open Folder」和「必须关掉旧终端」这两步。很多人配完就试,发现没变化,其实是卡在旧终端里手动 cd 习惯了,而没意识到新终端才是配置生效的唯一入口。











