插件进程隔离必须配合Profile创建、关闭并重开VSCode窗口、按语言配置禁用三者,否则禁用无效;Extension Host常驻内存,仅UI隐藏不释放资源;files.watcherExclude须用双星号通配且重启生效。

插件进程隔离不是“开了就行”,而是必须用 Profile + 重启窗口 + 按语言约束三者配合,否则禁用、卸载、改设置全白搭。
Profile 切换后插件还在后台跑?必须关窗重开
VSCode 的插件一旦激活,Extension Host 进程就常驻内存,Disable (Workspace) 只是 UI 上隐藏,不释放进程、不释放端口、不释放内存。你看到状态栏变了,但 code --status 里仍能看到 gitlens 或 pyright 的 PID 在跑。
- 正确操作:命令面板输入
Profile: Create Profile→ 命名(不能含空格,如java-spring)→ 打开目标文件夹 → 左下角点 Profile 名 →Apply Profile to Folder - 关键一步:关闭整个 VSCode 窗口(macOS 要退出菜单栏图标),再用
code --profile java-spring .重新打开 - 验证是否生效:运行
code --status,记下 Extension Host 的 PID,再执行ps -p [pid] -o args=,输出里不应出现你不想要的插件名(如esbenp.prettier-vscode)
按语言禁用插件比全局禁用更安全,但得看插件是否支持
不是所有插件都响应 "[python]": { "xxx.enable": false } 这类配置。它只对明确声明了可配置项的插件有效,比如 prettier-vscode 支持 prettier-vscode.enable,而 gitlens 就不认这个字段。
- 先查插件文档或设置搜索框,确认它暴露了哪些布尔型开关(如
eslint.enable、markdown.preview.enabled) - 在工作区
.vscode/settings.json中写:{ "[typescript]": { "eslint.enable": true, "prettier-vscode.enable": false }, "[rust]": { "eslint.enable": false, "prettier-vscode.enable": false } } - 注意:这种写法不会阻止插件加载,只抑制其功能;真正隔离仍要靠 Profile
files.watcherExclude 配错,隔离效果归零
哪怕你 Profile 用得再规范,只要 files.watcherExclude 没配对,GitLens、ESLint、TypeScript Server 就会持续扫描 node_modules 和 .git,触发大量无意义的 onDidCreateFiles 事件,间接拉起插件逻辑。
- 必须用双星号通配:
"**/node_modules/**",单星号"*/node_modules/*"或漏掉末尾/**都无效 - 必加项(写进用户或工作区
settings.json):"files.watcherExclude": { "**/node_modules/**": true, "**/.git/**": true, "**/dist/**": true, "**/build/**": true, "**/__pycache__/**": true, "**/.vscode/**": true } - 改完必须关闭并重开窗口,仅
Developer: Reload Window不生效
Profile 是唯一能强制卸载插件进程的机制,其他所有“禁用”“忽略推荐”“关闭功能开关”都是软性压制——它们防不住插件在后台监听文件、抢端口、占内存。最容易被忽略的是:切换 Profile 后没关窗,等于什么都没做。











