vscode窗口物理级隔离必须用--user-data-dir,--new-window仅创建共享会话的新视图;路径须为空或不存在以初始化独立配置,含扩展、快捷键及环境变量。

VSCode窗口隔离必须用--user-data-dir,不是--new-window
默认的Cmd+Shift+N或菜单“新建窗口”只是共享会话的新视图,所有窗口共用同一套扩展进程、调试端口和环境变量。你改一个窗口的settings.json,另一个马上同步;关掉一个,另一个可能丢断点。真正隔离只有一条路:code --user-data-dir="/path/to/unique"启动。路径必须为空或不存在,VSCode才会初始化全新用户数据目录——包括独立的extensions缓存、keybindings.json和state.json。macOS/Linux注意权限,Windows建议用绝对路径如C:\vscode-node18,别用波浪号~。
terminal.integrated.inheritEnv必须设为true且完全重启VSCode
VSCode集成终端默认是非login shell,根本不会执行~/.zshrc里的nvm加载逻辑。光在设置里开inheritEnv没用,必须彻底退出VSCode(macOS要右键Dock图标→Quit,Windows要任务管理器确认Code Helper进程消失),再用命令行带--user-data-dir参数重开。验证方法:新开终端后运行which nvm和nvm current,两者都应有输出;如果echo $NVM_BIN为空,说明nvm根本没加载,后续所有Node版本切换都是假象。
launch.json里runtimeExecutable必须用${env:NVM_BIN}/node
调试器(F5)启动时拍下的是进程启动瞬间的环境快照,和终端当前PATH无关。你在终端里nvm use 20再F5,跑的还是旧版本Node。唯一可靠写法是项目根目录下的.vscode/launch.json中显式指定:"runtimeExecutable": "${env:NVM_BIN}/node"。前提是上一步已确认NVM_BIN存在——硬编码路径如/Users/x/.nvm/versions/node/v20.15.0/bin/node换机器就失效,且无法响应nvm自动切换。
工作区.code-workspace文件控制终端初始路径,但不解决Node版本
.code-workspace能固化多文件夹结构和终端默认打开路径(由文件夹添加顺序决定),但它管不到Node版本、Python解释器这些运行时依赖。比如你把frontend/和backend/加进同一个工作区,终端初始路径可以设成backend/,但node -v仍取决于该窗口的--user-data-dir所对应的nvm环境。所以复杂项目必须分层:窗口级用--user-data-dir隔离nvm上下文,工作区级用.code-workspace组织文件夹和终端路径,项目级用.vscode/launch.json绑定调试器Node路径——三者缺一不可。











