VSCode终端默认在用户主目录启动,需在settings.json中设置"terminal.integrated.cwd": "${workspaceFolder}"使其自动进入当前工作区根目录;该变量在无工作区时退化为${fileDirname},全无时回落至用户主目录。

终端启动时总在用户主目录,怎么让它默认打开到当前项目根目录
VSCode 新建终端默认从 ~(macOS/Linux)或 %USERPROFILE%(Windows)启动,而不是你打开的文件夹。这不是 bug,是 VSCode 的默认行为——它只在你**显式通过文件资源管理器打开某个文件夹**(即“Open Folder”)后,才会把该路径作为工作区根目录;但终端仍可能忽略它,除非你主动配置。
关键点:终端是否自动 cd 进去,取决于 terminal.integrated.defaultProfile.* 和 terminal.integrated.cwd 两个设置的配合,且后者优先级更高。
- 如果设置了
terminal.integrated.cwd,它会**强制覆盖所有终端的起始路径**,无论你开的是哪个工作区 - 想让每个工作区用各自的根目录?别硬写死路径,改用变量:
${fileDirname}(当前文件所在目录)、${workspaceFolder}(当前工作区根目录) - Windows 用户注意:
\路径分隔符要写成/或双反斜杠\\,否则 JSON 解析失败
settings.json 里怎么写 terminal.integrated.cwd 才生效
直接在用户 settings.json 里写死路径(比如 "C:/myproject")会导致所有项目终端都跳过去,失去灵活性。正确做法是用 VSCode 提供的变量动态计算。
打开 VSCode 设置(Ctrl+,),右上角点“打开设置(JSON)”,添加这行:
"terminal.integrated.cwd": "${workspaceFolder}"
如果当前没打开文件夹(只有单个文件),${workspaceFolder} 会退化为 ${fileDirname};如果连文件都没打开,就 fallback 到用户主目录——这是最安全的兜底行为。
- 多个工作区时,
${workspaceFolder}指的是**当前活动编辑器所属的工作区根目录**,不是第一个打开的 - 想让终端始终进当前文件所在目录?换成
${fileDirname},但注意:如果编辑器里没打开任何文件,这个值为空,终端会失败回退到主目录 - Mac/Linux 用户若用 zsh/bash,不需要额外配置 shell 启动脚本;但 Windows 的 PowerShell 有时会因执行策略报错,此时加一句
"terminal.integrated.profiles.windows"显式指定 profile 更稳
为什么改了设置,新终端还是没进对目录
常见现象:改完 settings.json,重启 VSCode,新建终端依然在 ~ 或 C:UsersXXX。大概率是三个地方冲突了:
-
terminal.integrated.defaultProfile.*对应的 shell 配置文件(如~/.zshrc、~/.bash_profile、$PROFILE)里有cd命令,它会在终端启动后立即执行,强行跳转——VSCode 的cwd只控制初始路径,挡不住 shell 自己的初始化逻辑 - 你打开了多个工作区,但当前焦点不在你想设的那个工作区里,
${workspaceFolder}拿到的是另一个路径 - 某些插件(比如 “Terminal Here”)会劫持终端创建流程,绕过 VSCode 默认设置;临时禁用插件可验证是否是它导致的
快速验证方式:关掉所有终端,Cmd+Shift+P → 输入 “Terminal: Create New Terminal”,看路径是否符合预期。如果符合,说明旧终端只是缓存了旧 cwd,不是设置没生效。
Windows 下 PowerShell 终端总卡在 PS C:> 不进项目目录
PowerShell 的执行策略(ExecutionPolicy)常阻止 profile 加载,导致你写的 cd xxx 不执行;但更隐蔽的问题是:VSCode 启动 PowerShell 时,默认用的是 pwsh.exe(跨平台版),而你本地配置的 $PROFILE 往往只对 powershell.exe 生效。
- 先查当前终端用的是哪个:运行
$PSVersionTable.PSVersion,输出含 “Core” 就是 pwsh;不含就是 Windows PowerShell - 如果要用 pwsh,确保
$PROFILE文件存在且路径正确:if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force} - 但更推荐的做法是:不依赖 profile,直接靠 VSCode 的
cwd设置。只要"terminal.integrated.cwd": "${workspaceFolder}"存在,pwsh 启动时就会直接落在那里,无需额外 cd
真正容易被忽略的是:当工作区路径含空格或中文时,PowerShell 有时会因路径解析失败而静默 fallback 到系统根目录。此时检查 VSCode 状态栏右下角显示的“当前工作区路径”是否和文件资源管理器里一致——不一致说明工作区没正确加载,${workspaceFolder} 就是空的。


















