terminal.integrated.cwd需显式配置才生效,仅影响新建终端;支持${workspacefolder}等变量,但${filedirname}无效;优先级:shell脚本>工作区设置>用户设置;推荐用工作区相对路径或命令“create new terminal (in active file's folder)”。

终端默认不在当前项目根目录启动,是因为 terminal.integrated.cwd 没配,或者配了但值是 null 或空字符串——它不会自动“猜”你想要哪,必须显式设置。
terminal.integrated.cwd 怎么写才生效
这个配置只在新建终端(点「+」)时起作用,改完不用重启 VSCode,但已有终端不会变。它支持变量,但不是所有变量都可用:
-
"${workspaceFolder}":最常用,进当前工作区根目录;多根工作区时,取活动编辑器所在的那个根 -
"${userHome}":进用户主目录,跨平台安全,比如 Windows 和 macOS 都能用 -
"${env:HOME}"或"${env:USERPROFILE}":直接读系统环境变量,适合有特殊路径管理习惯的人 -
"./src":相对路径,以工作区根为基准,比如想默认进子包目录就写这个 -
"${fileDirname}":别写!它在terminal.integrated.cwd里不解析,会被当字面量处理,终端会报错或 fallback 到主目录
为什么改了 settings.json 还是进错目录
常见冲突点就三个,按优先级从高到低排查:
- Shell 初始化脚本(如
~/.zshrc、~/.bashrc、Microsoft.PowerShell_profile.ps1)里写了cd,它会在 VSCode 设置之后执行,强行覆盖路径 - Windows 上用了 Git Bash,它的启动参数(比如
--cd-to-home)可能忽略terminal.integrated.cwd - 配置写在了用户级
settings.json,但当前项目有工作区级.vscode/settings.json,后者优先级更高,且里面可能写了别的值甚至没写这一项
验证方法:临时重命名你的 shell 配置文件,再开新终端看是否进对目录。
想让终端总在当前文件夹打开,该用命令而不是配置
VSCode 原生不支持“每次新建终端都自动 cd 到当前文件所在目录”,因为 terminal.integrated.cwd 是静态的。真要实现,得靠命令:
- 手动触发:
Ctrl+Shift+P→ 输入Terminal: Create New Terminal (In Active File's Folder),回车 - 绑定快捷键:打开键盘快捷键设置(
Ctrl+K Ctrl+S),搜createTerminalInActiveFileDirectory,绑定如Ctrl+Alt+T - 注意:如果当前编辑器标签页没打开任何文件(全是空 tab 或设置页),命令会失败,提示
No active file
工作区设置比用户设置更可靠
团队协作或 monorepo 场景下,硬写死路径(如 "C:/myproject")会害惨别人。正确做法是:
- 在项目根目录建
.vscode/settings.json,写入"terminal.integrated.cwd": "${workspaceFolder}" - 如果项目结构固定(比如 always start in
./packages/web),直接写"./packages/web",相对路径更稳定 - 别用已弃用的旧键名
"terminal.cwd",VSCode 1.70+ 已不识别
变量兜底逻辑容易被忽略:没打开工作区时,${workspaceFolder} 会退化成 ${fileDirname};连文件都没打开,就 fallback 到 ${userHome}——这个行为不是 bug,是设计好的保底机制。











