必须设为"${workspaceFolder}",因它是唯一在所有场景下稳定展开的变量:Open Folder时展开为项目根目录,仅开文件时退化为${fileDirname},全无时fallback至${userHome};其他变量如${fileDirname}在终端启动时不解析,会被当字面量处理导致错误或跳转至用户主目录。

直接设 terminal.integrated.cwd 为 "${workspaceFolder}" 就行,这是唯一可靠且通用的做法。
为什么必须用 "${workspaceFolder}"?
VSCode 终端默认不进项目根目录,是因为 terminal.integrated.cwd 没配置,或值为 null / 空字符串 —— 它不会自动“猜”你当前在哪。而 "${workspaceFolder}" 是唯一在所有常见场景下都稳定展开的变量:
- 你通过 File → Open Folder 打开了项目 → 展开为该文件夹的绝对路径
- 只打开了单个文件(没 Open Folder)→ 退化为
${fileDirname},即文件所在目录 - 完全没打开任何文件或文件夹 → fallback 到
${userHome}
其他变量如 "${fileDirname}" 在终端启动时根本未解析,会被当字面量处理,结果常是报错或直接跳到用户主目录。
配置写在哪?优先级怎么算?
工作区级设置(.vscode/settings.json)比用户级设置(全局 settings.json)优先级高,且更安全:
- 多个项目共用一个 VSCode 实例时,全局配置会强制所有终端进同一个路径,容易互相干扰
- 在项目根目录下建
.vscode/settings.json,写入:{<br> "terminal.integrated.cwd": "${workspaceFolder}"<br>} - 如果想进子目录(比如
./packages/web),写相对路径:"./packages/web",它以工作区根为基准 - Windows 路径写成
"C:/my/project"或"C:\my\project",别用单反斜杠C:myproject(JSON 解析失败)
改了为啥终端还是没变?
这是最常被忽略的一点:terminal.integrated.cwd 只在新建终端时读取一次,对已打开的终端完全无效:
- 关闭所有已有终端(点垃圾桶图标),再按
Ctrl+Shift+`新建一个 - 不要指望保存设置后旧终端自动跳转,它不会响应变更
- 如果新终端仍不对,检查是否被 shell 初始化脚本覆盖:临时重命名
~/.zshrc或Microsoft.PowerShell_profile.ps1,再试 - Git Bash 用户注意:它的启动参数(如
--cd-to-home)可能强行覆盖路径,需加--no-cd参数禁用
想让终端总在当前文件所在目录打开?
terminal.integrated.cwd 是静态配置,做不到“随编辑器焦点动态切换”。真要实现这个效果,得用命令:
- 手动触发:
Ctrl+Shift+P→ 输入Terminal: Create New Terminal (In Active File's Folder) - 绑定快捷键:搜
createTerminalInActiveFileDirectory,绑个组合键(如Ctrl+Alt+T) - 注意:当前编辑器标签页没打开真实文件(全是空 tab 或设置页)时,命令会失败,提示
No active file
多根工作区下,${workspaceFolder} 指的是活动编辑器所在的那个根,不是所有根的拼接 —— 这个细节一旦忽略,就容易误以为配置失效。


















