VS Code 启动不再自动打开上次项目:一行配置轻松解决
如果你的 VS Code 每次双击打开都自动带着上次的项目窗口呼啦一下弹到面前——明明今天想开的是 B 项目结果屏幕上先蹦出来的是上周没关完的 A 项目多少有点“被绑架”的感觉。特别是那些手上常年有好几个项目的同学或者临时要在别人电脑上演示个干净界面的时候这个自动恢复行为真的很碍事。这篇文章就专门来解决这个问题让 VS Code 启动后不再自动打开任何项目安安静静停留在欢迎页或空白编辑器里把选择权完全交回给你。先说一下适合谁看被“启动自动打开上次项目”困扰的所有 VS Code 用户不限系统Windows、macOS、Linux 通用不限使用方式纯本地开发、远程开发都适用。全文会从根因讲起教你用最核心的一个设置解决问题再搭配上几个我实测过很舒服的边角配置最后是常见坑和排查实录。文章不废话全是实操。1. 先搞清楚VS Code 为什么会自动打开上次的项目1.1 自动恢复其实是设计好的“保护机制”很多人第一次遇到这个行为时第一反应是“是不是哪里配置错了”。其实恰恰相反VS Code 默认恢复上次会话是为了保护你的工作现场。想象一下这个场景你正改着五六个文件调试窗口还开着结果电脑突然断电或者 VS Code 崩溃了。如果没有会话恢复机制等你重新打开编辑器一切都要从头来重新打开项目、重开文件、重新摆好窗口布局。这体验是非常崩溃的。所以 VS Code 默认会记录你上次退出时的窗口列表、打开的项目文件夹和文件并在下次启动时尝试恢复。这个行为对应的配置项叫window.restoreWindows默认值是all含义就是“恢复所有上次打开的窗口和项目”。对单项目、长周期开发的人来说这个默认行为是福音——每天打开电脑VS Code 自动回到昨天的现场效率极高。但对另一批人来说它就是纯粹的负担我的项目是多线并行的今天做这个明天做那个你每次自动打开某个固定项目我反而要费劲去关掉它再重新找目标项目入口。1.2 你真正想要的效果启动后回到“待命状态”我们把需求拆开看其实无非两种打开 VS Code 后它处于一个空白、中立的状态等我主动选择打开哪个项目打开 VS Code 后只恢复最近使用的那个窗口比如就一个窗口但不要“呼啦”一下恢复出三四个窗口。标题里说的“让它安静地等待你的选择”对应的就是第一种。想要这个效果核心就是调整window.restoreWindows这个参数。改完以后VS Code 启动时不会恢复任何项目窗口而是直接进入一个干净的初始状态再配上欢迎页就是名副其实的“待命状态”。注意这里说的“不恢复项目”不等于“不记录历史记录”。VS Code 的“最近打开的项目”列表依然会保留你随时可以在欢迎页或文件菜单里找到之前的项目入口。2. 最核心的一招修改 restoreWindows 为 none2.1 打开设置并进入配置文件有两种方式打开设置快捷键Ctrl ,Windows / Linux或Cmd ,macOS菜单入口文件 → 首选项 → 设置。图形界面的设置面板也能改这个参数但我不太推荐直接用界面搜索去改原因是版本迭代后界面文字可能变化而且图形界面改完不容易一眼看出完整配置内容。更推荐直接编辑settings.json文件一劳永逸也方便备份和同步。打开settings.json的方法在设置面板右上角点那个“打开设置(JSON)”的图标一般在齿轮旁边或者直接用命令面板Ctrl Shift P输入 “Open User Settings (JSON)” 并回车。2.2 写入关键配置在settings.json里加一行{ window.restoreWindows: none }如果你的文件里已有其他配置就在大括号里补上这一行记得注意逗号分隔别把它加在最后一项的后面然后忘加逗号JSON 格式特别容易在这种地方出问题。保存后完全退出VS Code不是关闭窗口就完事要确认进程全部退出重新启动你就会发现没有自动恢复的项目窗口了VS Code 很安静地打开在初始页面。这个参数一共有三个可选值我把区别列出来参数值启动时行为适合人群all恢复上次打开的所有窗口和项目长期固定项目开发、依赖恢复现场的人one只恢复上次的一个窗口和项目想保留主工作现场、又不想被一堆窗口淹没的人none不恢复任何窗口和项目多项目切换、演示需求、喜欢干净启动的人提示改完设置如果“好像没生效”多半是没真正退出进程。Windows 上注意看系统托盘里有没有 VS Code 的残留图标macOS 上确认 Dock 里没有带红点的小圆点。2.3 为什么我优先推荐 none而不是 oneone这个选项看起来是个折中方案只恢复一个窗口不至于太乱。但是我自己试过很长一段时间后发现它仍然存在一个尴尬VS Code 恢复的那个“上次窗口”不一定是今天我想用的那个项目。今天任务切换了它却还按历史记录恢复昨天的项目我依然要先关掉它再点开新项目。none是最干净的。启动后是什么状态就一个空的编辑器区域配合后面的欢迎页设置整个启动体验非常清爽。它没有“替你做决定”而是把每次主动选择项目这件事交还给你本人。对于项目切换频繁的开发节奏这种“每次从零开始主动选择”的效率反而更高。3. 进阶玩法临时不恢复和永久不恢复的组合拳3.1 临时命令不想改设置但这次想干净启动有些场景下你不需要永久改变启动行为比如同事借你的电脑演示你想给他一个没有历史包袱的干净环境或者你自己偶尔想开一个临时窗口不想让 VS Code 自动带上上次的东西。这时候不要动全局设置用命令行参数临时控制就行code --new-window这个命令会新开一个空窗口不恢复任何项目。还有一种更常见的是--reuse-windowcode --reuse-window这个表示如果当前已经有 VS Code 窗口则复用现有窗口打开文件或项目而不是再新建一个窗口。适合配合文件路径使用比如在终端里打开某个文件code --reuse-window src/index.js如果你希望真正“重置”到一个新窗口就始终记住--new-window这个参数。实测下来它临时绕开恢复机制非常有效不碰任何配置。3.2 用启动参数直接指定你要的项目再进一步其实很多人的“自动打开上次项目”烦恼实际上是启动方式造成的。如果你习惯双击桌面快捷方式启动 VS Code那么它就会按默认配置走恢复逻辑。但如果改成从终端启动并显式指定项目路径code ~/projects/demo-project那么 VS Code 会直接打开指定项目这时候不管restoreWindows怎么设置都会以你指定的项目为主。这个习惯特别适合多项目并行的人与其让编辑器猜你想干嘛不如直接告诉它。我自己后来就形成了一个固定习惯日常开发不双击图标启动而是开着终端进入项目目录后直接code .。这样 VS Code 打开的永远是当前这个项目和上一回任务完全无关。这个操作配合restoreWindows: none简直顺滑。3.3 组合场景想保留“最近项目入口”但拒绝自动恢复这里会有人担心设置了none之后是不是所有项目记录都没了完全没有这回事。“不自动恢复”和“不记录历史”是两码事。VS Code 的欢迎页上有“最近”列表文件菜单里也有“打开最近使用的文件/项目”只要你没有手动清除历史记录这些入口始终都在。也就是说你可以做到启动完全干净不恢复任何项目选择从欢迎页“最近”列表里一键进入上次的多个项目。这就是我一直在用的状态鱼和熊掌兼得。4. 把启动体验调到最顺配合这几个联动设置4.1 启动后出现欢迎页而不是空白页把window.restoreWindows改成none之后再启动 VS Code 默认出来的是一个空白工作区。有些人觉得挺好有些人觉得空白得有点“秃”。这时候可以配合workbench.startupEditor来指定启动时的内容。如果你希望启动后有引导入口、有快捷键提示、有最近项目列表就设置成{ workbench.startupEditor: welcomePage }如果你连欢迎页都不想要想要一个纯空白编辑器直接启动那设置成{ workbench.startupEditor: none }还有个选项叫readme会在启动时显示当前项目的 README 文件适合你经常进入某个 README 为入口的项目。一般我用不上这个但多知道一个选项没坏处。注意workbench.startupEditor只在“新窗口首次启动”时生效如果你手动新建空白窗口文件→新建窗口不会反复弹出欢迎页这是正常的。4.2 控制双击文件夹时的打开行为启动干净了日常还会遇到另一个疑问为什么我双击一个项目文件夹有时候在当前窗口打开了有时候又新开了一个窗口这和另一个参数有关{ window.openFoldersInNewWindow: default }它的取值行为大概这样on双击文件夹时总是新开一个窗口打开off在当前窗口打开文件夹如果当前窗口为空则会复用当前窗口default默认值按系统/运行环境自动判断。想要更可控的体验我建议在下面两个场景中做选择你已经养成了“一个窗口对应一个项目”的习惯那设置成on更稳妥你更喜欢一个窗口里来回切换工作区那设置成off更顺手。这个设置和restoreWindows: none搭配起来效果就是每次启动干净、打开项目的方式也完全按你的预期来不会出现“启动没恢复项目结果双击文件夹又呼啦冒出来一个旧窗口”的错乱感。4.3 为什么推荐用 settings.json而不是图形界面勾选前面提到过优先用settings.json改配置。补充一下深层原因一是可移植性。你是settings.json里写好的配置换电脑、装新环境、甚至给团队做统一开发配置直接复制内容过去就行不用重新在 UI 里找半天。二是可读性。UI 界面改完以后你不知道改了哪个配置项也不容易回溯。JSON 文件里明明白白写着window.restoreWindows想改回来删掉或改成all就行。三是可控性。有些配置在 UI 里可能因为版本差异找不到入口但 JSON 里可以直接写不依赖界面是否提供对应开关。我见过有人花了很多时间在 UI 搜索栏里搜“restore window”死活搜不到就是因为界面显示的文字和配置名不是一模一样搜不到不代表不支持直接在 JSON 里写才是最快路径。5. 常见问题与排查技巧实录5.1 改了配置启动还是自动打开项目这个是我被问得最多的问题。排查顺序如下第一确认配置真的写对文件了。window.restoreWindows必须放在用户设置User Settings里而不是项目工作区设置Workspace Settings里。工作区设置只会对当前这个项目生效管不了启动全局行为。第二确认 JSON 语法没有错。常见错误是上一个配置项末尾少了逗号或者多了个逗号整个文件变红。这种情况下 VS Code 不会报错但配置可能会不生效或部分失效。第三确认启动方式。如果你是通过code ~/projects/xxx这样的命令启动的那么指定了具体项目路径时VS Code 打开对应项目是正常的。这不属于“自动恢复”而是“显式打开指定项目”。第四确认是否真的完全退出了。建议在 Windows 上打开任务管理器搜索“Code”相关进程全退干净再试。macOS 上按Cmd Q退出别只关窗口。5.2 崩溃恢复提示和 restoreWindows 是什么关系VS Code 崩溃后再次启动有时候会弹出一个提示框问你是否要恢复上次未保存的编辑内容。这个提示和window.restoreWindows是两个机制。崩溃恢复提示属于“编辑器会话恢复”恢复的是你没有保存的文件内容和未提交的编辑状态它更接近于数据保护而restoreWindows控制的是“应用窗口和项目恢复”恢复的是你打开了哪些窗口和文件夹。所以哪怕你设置了none如果遇到崩溃后重启VS Code 依然可能询问是否恢复未保存的文件。别以为是配置失效了这俩不冲突。顺带说一句这个崩溃恢复机制建议保留关键时刻救过我好几次文件比丢失一整个文件内容要强太多。5.3 装了某些插件后启动又变“乱”了有些第三方插件也会启动恢复逻辑比如“记住上次打开全部文件”的会话管理类插件或者某些远程连接插件会在启动时自动重新连接上次的远程窗口。如果你改了restoreWindows: none之后启动依然自动打开了某些东西先想想是不是扩展的锅。排查方法很简单在命令面板执行“禁用所有已安装扩展”后重启 VS Code观察行为是否恢复正常。如果确实没了再逐个启用扩展找到“肇事者”。我个人经验是远程开发场景尤其容易混淆。VS Code 的 Remote 插件恢复远程窗口时看起来就像“自动打开了上次的项目”实际上是另一个层级的恢复逻辑。5.4 速查表问题、原因与对应解法现象可能原因解决办法设置了 none 还自动打开项目配置写在了工作区设置中把配置移到用户设置设置了 none 还恢复文件内容崩溃恢复机制在起作用这是数据保护无需关闭启动后自动连接远程窗口Remote 插件的会话恢复在插件的设置中关闭自动重新连接通过终端code 路径启动显式指定项目路径不属于自动恢复行为正常修改 JSON 后红色波浪线JSON 语法错误逗号或括号问题检查逗号和花括号配对5.5 一个容易被忽略的细节快捷键关窗不等于退出有人反馈“我明明关掉了 VS Code 窗口啊怎么重启电脑后打开 VS Code 它又自动恢复了上次的项目”这里有个小坑关掉窗口只是关闭了编辑器窗口进程可能还留在后台。在 Windows 和 macOS 上VS Code 默认会在关闭最后一个窗口后退出但某些情况下比如有插件在后台运行、正在同步设置、或者文件监视器还在工作进程不会立刻结束。更常见的场景是你用快捷键Ctrl Shift W或Cmd Shift W关闭当前窗口但 VS Code 的启动逻辑依然记住了上次的会话快照。等下次开机如果是系统自动启动 VS Code或你点击图标启动它可能还是按那次会话恢复。要验证这一点可以看系统托盘Windows或 DockmacOS里 VS Code 的图标是否还在。如果还在右键退出然后再重新启动试试。我自己的经验是绝大多数“改了没生效”的案例最后都出在“没真正退出进程”上。6. 最后再分享一个小技巧6.1 给不同项目做固定启动入口如果你和我一样是多项目并行最后再推荐一个让 VS Code 启动行为完全可控的办法给每个项目做独立的启动方式。比如你用终端可以在项目的根目录下写一个小脚本专门用 VS Code 打开当前项目#!/bin/bash code --new-window ~/projects/demo-project给脚本起个名字比如opendemo.sh放在 PATH 能找到的地方以后无论从哪里打开终端敲一行命令就能从干净窗口进入指定项目。这样做的好处是你永远不会看到“不请自来”的旧项目因为每次启动都是显式指定路径的。6.2 用工作区文件固化项目视图VS Code 支持.code-workspace工作区文件。你可以把相关项目组合保存为一个工作区比如“前端架构”或“后端服务”启动时直接打开工作区文件它会自动按文件里的根目录列表展开多个项目。这和自动恢复是两回事——这是你主动选择的固定套装。配合restoreWindows: none日常流程就变成了开机 → 打开 VS Code干净不自动恢复→ 从欢迎页最近列表或工作区文件中选择今天要干的事。主动权完全在你手里没有惊喜也没有惊吓。6.3 把配置做成你的标准模板其实折腾完这一轮配置以后你会发现最值钱的不是单个开关而是这套组合方案。我建议把.vscode相关的个人设置做成一份清单方便以后在新电脑上快速还原{ window.restoreWindows: none, workbench.startupEditor: welcomePage, window.openFoldersInNewWindow: default }这三行合在一起就是一套“启动干净但不冷漠、打开项目方式可控、恢复现场不依赖”的配置组合。直接放进用户设置文件里就可以当作自己的标准模板。以后不管换到哪台设备这套启动体验都能保持一致。我个人实践下来的感受是换了配置之后VS Code 再也不是“一打开就给我塞旧项目”的那个工具了它变成了一个真正等我下指令的工作台。这种“把控制权拿回来”的感觉值得每一位被自动恢复困扰的开发者拥有。