你有没有发现,新版 VSCode 打开后总是先进 Welcome 界面:一个占满窗口的欢迎页,上面是“最近打开”“打开文件夹”“克隆 Git 仓库”,偶尔还有版本新特性介绍。有人烦得不行,到处找关闭办法;也有人相反,巴不得它每次都出现,省得自己再手动点开。这篇就围绕“新版 vscode 设置:打开始终是 welcome 界面”这个需求,把启动欢迎页的完整机制、核心配置项、实操步骤和常见排查全讲一遍。你照着配置,既能让它稳定出现,也能在不想看到它时把它彻底关掉。
1. 先搞懂:VSCode 启动欢迎页的运行机制
1.1 欢迎页到底在“等”什么
Welcome 界面本质上是 VSCode 的“启动导航页”,它不是一个普通的文件标签页,而是一个由内置扩展vscode.welcomePage渲染出来的特殊页面。它的主要作用是在你还没有打开任何项目时,给你提供快捷入口:最近的工程目录、打开文件夹、克隆仓库、新建文件,甚至包含一些帮助文档和定制编辑器入口。
很多人觉得它“只是广告页”,其实误解了。对于多项目开发的用户来说,欢迎页上的“最近打开”列表非常有用,它省去了每次都要通过资源管理器去翻目录的麻烦。对于新手来说,欢迎页也是探索 VSCode 功能的一个入口,比如里面就有“学习视图”之类的模块,可以快速了解快捷键和常用命令。
这里的关键点是:欢迎页只在“当前窗口没有打开任何编辑器或工作区”的时候才有意义。如果 VSCode 已经恢复了你上次的文件夹和文件,那欢迎页就不会占主舞台。所以你看到的“总是 Welcome 界面”,通常是因为启动窗口本身处于“空状态”。
1.2 新版本里它为什么存在感这么强
近几个大版本里,欢迎页的存在感确实变强了。原因有几个:
第一,新版本默认把内联欢迎页布局做得更漂亮了,模块化程度更高,视觉上不再像早期版本那样简陋,所以打开后更容易引起注意。
第二,默认的启动编辑器策略发生了变化。在过去某个版本中,VSCode 启动后可能倾向于恢复上次会话,而当你用快捷键“新建窗口”或者点击图标启动时,默认会进入一个空窗口,空窗口又默认展示欢迎页,于是它出现的频率就很高。
第三,欢迎页本身会被纳入窗口会话恢复机制。也就是说,如果你上次关闭 VSCode 时停留在欢迎页,下次打开时它会把这个页面当作“打开的编辑器之一”恢复出来。这就导致很多人明明改过设置,还是发现欢迎页在“刷存在感”。
搞清楚这套机制是第一步。你只有知道欢迎页出现的时机和触发路径,才能精确配置成“打开始终是 welcome 界面”,或者反过来把它按下去。
1.3 谁需要让欢迎页“始终出现”
如果你只是偶尔用一下 VSCode 写点脚本,欢迎页对你可能无所谓。但以下几类人,确实适合让欢迎页始终出现:
- 多项目切换频繁,依赖“最近打开”列表快速进入工作上下文;
- 经常要演示、写教程,希望每次打开软件时,屏幕上是干净整洁的启动页而不是上次遗留的代码;
- 团队环境里,新人需要每次进入时看到帮助文档和项目入口;
- 使用“克隆 Git 仓库”作为第一动作的人。
当然也有反向场景:老手打开 VSCode 是想立刻回到上次的编码上下文,欢迎页反而是干扰。这两种需求我都遇到过,所以下面给的方案会兼顾两边。
2. 核心配置:四个设置项把启动行为彻底拿捏
2.1 主角:workbench.startupEditor 的每个可选值
要让 VSCode 打开始终显示欢迎页,核心配置项是workbench.startupEditor。这个设置项的全名是 Workbench: Startup Editor,控制“启动窗口时,如果没有任何工作区恢复,默认打开什么”。它的可选值很关键,我逐个解释。
none:启动后不开任何编辑器。窗口是空的状态,不显示欢迎页,也不新建文件,就像你刚安装完什么都没碰过一样。welcomePage:启动后显示欢迎页。这就是你需要的核心值。readme:如果你用一个带 README 文件的文件夹启动,就打开 README;如果没有 README,回退到欢迎页。newUntitledFile:每次启动空窗口时自动新建一个未命名文件,相当于给你一张“白纸”。terminal:启动后直接打开内置终端面板。我是经常用终端的人,这个选项适合以命令行工作流为核心的人。
所以如果你希望“打开始终是 welcome 界面”,最简单的写法就是:
{ "workbench.startupEditor": "welcomePage" }但要注意,workbench.startupEditor只有在“空窗口”场景下才完全生效。什么叫空窗口?就是你直接双击 VSCode 图标、或者通过“文件”菜单里的“新建窗口”打开的那个窗口。如果你用命令行code .打开了一个具体目录,或者双击了一个.js文件,VSCode 会直接进入对应的工作区,而不是先给你看欢迎页。这一点不搞清楚,你会觉得“我都设置了怎么没用”。
2.2 配角:window.restoreWindows 如何决定窗口恢复
workbench.startupEditor管的是“没有历史包袱时打开什么”,而window.restoreWindows管的是“要不要把上次的窗口状态带回来”。两个设置配合起来,才能真正实现“每次打开始终是欢迎界面”。
window.restoreWindows的可选值大致有三个:
none:每次启动都不恢复上次会话,相当于每一次都是全新开始。one:恢复上一次关闭窗口时的状态,这是默认值。如果你上次停在一个文件上,下次启动会看到那个文件;如果你上次停在欢迎页,那启动后欢迎页也可能再次出现。all:恢复上次所有打开的窗口,适合经常开多个 VSCode 窗口工作的人。
组合起来看,如果你希望“每次启动软件,必定是欢迎页”,最稳的配置是:
{ "workbench.startupEditor": "welcomePage", "window.restoreWindows": "none" }restoreWindows: none保证了不会恢复上次文件,startupEditor: welcomePage保证了空窗口显示欢迎页。两个一起用,才能真正做到“始终”。
如果不想放弃窗口恢复能力,那就必须接受一个折中:保留window.restoreWindows: one,但这时当启动后恢复了上次的文件夹或文件,欢迎页就不会出现。所以严格意义上的“始终是欢迎页”,只能配合none使用。我在实际使用中会把这个取舍讲给团队里的人,让他们自己判断。
2.3 兜底:命令面板与快捷键手动召回
有些场景下,你可能不想每次都重启 VSCode,只想随时调出欢迎页,那么可以用命令面板:
- 按
Ctrl+Shift+P打开命令面板(Mac 上是Cmd+Shift+P)。 - 输入
Welcome,找到并执行Help: Welcome。
这个命令的作用是立即在当前窗口打开欢迎页,无论现在有多少标签页。如果你经常要用,可以给它绑定一个快捷键:打开“键盘快捷方式”(Ctrl+K Ctrl+S),搜索“Welcome”,找到Help: Welcome,右键“添加键绑定”,比如设成Ctrl+Shift+W之类你顺手的组合。
这个兜底方式适合两类人:一类是已经把startupEditor设成none但偶尔想要欢迎页的人;另一类是想要欢迎页但不希望每次启动都出现,只希望“需要时手动打开”的人。
2.4 小心:配置可能被覆盖的三个地方
VSCode 的配置体系不像很多人想的那么“一个全局 JSON 走天下”。它至少分三个层级:
- 用户设置:全局生效,配置在用户目录下的
settings.json。 - 工作区设置:只对当前项目生效,配置在项目根目录的
.vscode/settings.json。 - 远程设置:使用 Remote SSH、容器、WSL 等远程开发时,远程端还有一份独立设置。
层级关系是“工作区设置 > 远程设置 > 用户设置”。也就是说,如果某个项目里的.vscode/settings.json写了"workbench.startupEditor": "none",那么你在全局设置的welcomePage在这个项目里就不生效。
另外,VSCode 里的“配置文件”(Profile)机制也会影响设置。如果你创建了多套 Profile,并且当前使用的 Profile 里改了启动相关设置,那全局设置可能被 Profile 覆盖。排查的时候,先看设置面板左上角当前生效的是哪个 Profile,再看具体设置项右侧有没有笔形图标提示“已修改”或“被覆盖”。这种细节,是我在帮同事排查“为什么改了没生效”时经常遇到的原因。
3. 实操:从设置面板到 JSON 的一步步配置
3.1 图形界面三步走
如果你对 JSON 不熟,用设置面板最快。步骤很简单:
- 打开设置:
Ctrl+,(Mac 是Cmd+,)。 - 在搜索框输入
startupEditor,找到Workbench > Startup Editor,把它从下拉框中改成Welcome Page。 - 再在搜索框输入
restoreWindows,找到Window > Restore Windows,下拉框选择None。
改完之后,建议做一次“重载窗口”让配置彻底生效。操作方法是Ctrl+Shift+P,输入Reload Window,执行Developer: Reload Window。这一步别跳过,我见过太多人改完设置不重载,然后跑来问“为什么没生效”。
图形界面改完的效果等价于在settings.json里写入两个键值,但图形界面有个好处:它能实时显示每个设置项的说明文档,并且能清晰看到当前值是从哪个层级来的。对于新手来说,这比直接改 JSON 更不容易出错。
3.2 直接改 settings.json 的推荐写法
如果你是喜欢把配置文件纳入版本管理的老手,直接编辑settings.json更高效。打开的路径是:命令面板 → 输入Open User Settings JSON,或者从设置面板右上角的“打开设置(JSON)”图标进入。
推荐的完整配置如下:
{ "workbench.startupEditor": "welcomePage", "window.restoreWindows": "none" }如果你希望“平时正常恢复上次会话,但新建的空窗口显示欢迎页”,则可以这样写:
{ "workbench.startupEditor": "welcomePage", "window.restoreWindows": "one" }两种写法的区别需要再强调一次:第一种能保证每次从图标启动都是欢迎页,但代价是每次都丢失上次打开的文件夹和标签页;第二种更接近日常使用,但严格意义上“始终出现欢迎页”是做不到的,因为恢复工作区时不会显示欢迎页。基于我自己的经验,绝大多数需要“始终欢迎页”的人,要的其实是第一种。
3.3 新版欢迎页布局选项:inline 与经典布局
新版 VSCode 把欢迎页改成了内联布局(inline),也就是直接嵌到编辑器标签页区域里,看起来像一个打开的页面。如果你更习惯早期那种“整页固定”的经典布局,可以在设置里搜索welcomePage相关的布局选项,不同版本叫法略有差异,有的版本是inline与classic,有的版本则叫custom,以你本地下拉框显示为准。
除了布局,欢迎页本身的模块也可以定制。在欢迎页右上角的布局或更多菜单里,通常能选择要不要显示“最近”“打开文件夹”“克隆 Git 仓库”“帮助”这些模块。我建议保留最近列表和打开文件夹就足够了,其他模块越多,启动首屏越乱。
这个细节很多人不知道。默认欢迎页模块很多,尤其在宽屏显示器上,各种大卡片会把首屏塞得满满当当。裁剪掉不用的模块后,欢迎页才真正变成一个清爽的导航页。
3.4 让欢迎页常驻标签页的另类用法
还有一个小众但很实用的玩法:把欢迎页“固定”成常驻标签页。你打开欢迎页后,在标签上右键,选择“固定”(Pin Tab),那么欢迎页这个标签就会一直停留在标签栏最前面,不再被其他打开的标签页顶掉。之后你随便打开多少个文件,欢迎页那个标签始终在。
这个玩法解决的是另一种“始终”:你不用每次重启都看欢迎页,但你的 VSCode 里始终有一个欢迎页可以作为回退首页。我是这么用的:日常打开项目看到的是工作区文件,但当我想切到另一个项目时,点一下固定的欢迎页标签,最近项目列表就在眼前。它比“重新开一个 VSCode 窗口”更轻量。
4. 反向需求:不想它出现怎么办 + 常见问题排查
4.1 让欢迎页老实退场
如果你其实是想关掉欢迎页,只是搜索时搜到了这个话题,那配置也很简单。打开settings.json,写入:
{ "workbench.startupEditor": "none" }如果你想保留上次打开的文件和窗口,而不是每次面对空白编辑器,建议同时把恢复选项设回默认值:
{ "workbench.startupEditor": "none", "window.restoreWindows": "one" }这两行配置组合的效果是:启动时恢复上次工作区,且不会出现欢迎页。如果这样配置后欢迎页还是会出现,那大概率不是设置本身的问题,而是下面要说的排查场景。
4.2 “为什么关闭了还出现”的排查思路
我碰到过好几次用户说“我明明设置了 none,第二天打开又有欢迎页了”。排查路径一般是这样:
第一,先看当前生效的范围。打开设置面板,搜索startupEditor,如果左边有“工作区”标签或者配置项旁边显示“工作区”来源,说明全局设置被某个项目覆盖了。这时需要去那个项目的.vscode/settings.json里把对应项改掉或删除。
第二,检查 Profile。VSCode 新版本默认使用配置集(Profile),你当前活动 Profile 可能有独立设置。如果你从某个模板创建了 Profile,且那个模板里带上了欢迎页配置,那你在“用户”级别改了也可能没用,要切到当前 Profile 下改。
第三,检查扩展。某些扩展会主动打开欢迎页或“起始页”,这是最隐蔽的。特别是一些远程开发扩展、主题扩展、或者带引导流程的扩展,在安装后第一次启动时都会弹出自己的介绍页。如果你关闭欢迎页设置后还出现类似页面,先去“扩展”面板禁用最近安装的扩展,试一下是否还出现。
第四,确认是否是窗口恢复。如果你上次关闭 VSCode 时,欢迎页标签本身就是打开的,且window.restoreWindows不是none,那么重启后它会作为“上次打开的文件之一”被恢复出来。这跟startupEditor反而是无关的。最简单的验证方法:欢迎页打开时关掉它,再正常退出 VSCode,看下次会不会出现。
4.3 常见问题速查表
我把配置欢迎页过程中遇到的典型问题整理成一张速查表,你可以直接对照排查。
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 设置了 welcomePage 却看不到欢迎页 | 打开了具体的文件夹或文件启动 | 用空窗口启动,或把 restoreWindows 设为 none |
| 设置了 none 还是会看到欢迎页 | 上次会话停留在欢迎页,窗口恢复把它带回来了 | 关闭欢迎页后退出再试 |
| 全局改了设置,某项目里不生效 | 项目里的 .vscode/settings.json 或 Profile 覆盖了 | 检查工作区设置和当前 Profile |
| 欢迎页出现时机不固定 | 某些扩展主动打开介绍页 | 禁用最近安装的扩展逐个排查 |
| 远程开发时设置失效 | 远程端有独立设置 | 在远程端重新修改对应设置项 |
| 想要欢迎页但不希望每次出现 | 设置与需求不匹配 | 固定欢迎页标签,用命令面板手动打开 |
这张表里的每一种情况,我都实际碰到过至少一次。尤其是“设置 none 还出现”这种情况,十次里有七八次其实是窗口恢复导致的,不是设置没生效。
5. 我的实测经验与几个容易忽略的细节
5.1 改了设置没生效?先做这件事
很多人改完settings.json就立刻最小化窗口,然后重新打开窗口,发现还是老样子。这里有个容易忽略的点:VSCode 的“窗口”和“进程”不是完全等价的。当你关闭最后一个窗口时,后台进程往往还活着,尤其是 Windows 上托盘图标还在时,重新点击图标打开的窗口可能只是往已有进程里“新建窗口”。
所以我的习惯是,改完启动相关设置后,不只做Reload Window,还要做一次彻底退出。在 Windows 上,确认系统托盘里的 VSCode 图标也退出;在 Mac 上,按Cmd+Q完全退出,再重新打开。这件事几乎成了我的默认动作。
5.2 远程开发、容器和同步设置里的坑
如果你主要用 Remote SSH 或者 Dev Containers 开发,欢迎页相关设置会有一个非常隐蔽的坑:远程窗口的设置和本地窗口的设置是两套。
本地用户设置里配了welcomePage,但远程端因为是独立环境,启动时用的是远程端配置。你要么在远程连接后重新设置一遍,要么把配置写进远程配置里。否则你会发现,本地开着欢迎页,一连远程服务器,欢迎页就没了,反而是一些远程扩展的启动页乱入。
Settings Sync 也值得注意。如果你同时在公司电脑和个人电脑上使用 VSCode,并且开了设置同步,那么你在公司电脑上为了让演示“始终欢迎页”而设置的restoreWindows: none,会同步到个人电脑上。个人电脑上你会突然发现每次启动都不恢复上次文件了。这是同步机制的副作用,不是 bug。
5.3 实战小技巧
最后分享几个我长期用下来的小技巧。
第一,如果既想要“每次打开软件都看到最近项目”,又不想忍受欢迎页的各种大卡片,可以把欢迎页模块裁剪到最少,只留“最近”列表。这样首屏就是一个类似“最近项目选择器”的干净页面,效率非常高。
第二,以“克隆仓库”为第一动作的人,建议保留欢迎页里的 Git 模块,这样开新项目时不用开浏览器去复制仓库地址再粘贴到命令面板,直接点欢迎页入口就行。
第三,如果你是在写教程或者做分享演示,建议把window.restoreWindows临时改成none配合欢迎页,这样每次开窗口都是统一的初始界面,不会泄露你之前打开的代码文件,演示观感会好很多。演示结束再改回来就是。
第四,命令面板里的Help: Welcome是任何时候召唤欢迎页最稳的方式,比关掉所有标签页再等它自动出现要可靠。把这个命令绑定成快捷键后,欢迎页就变成了一个“随时呼出”的工具,而不是一个“被动出现”的页面。
关于欢迎页,我个人的体会
我自己日常用的组合其实是workbench.startupEditor: welcomePage加window.restoreWindows: one。听起来有点矛盾,但实际体验是:平时从命令行code .打开项目时,它直接进入项目,不受欢迎页影响;而当我纯粹想开始一个新的工作上下文时,按Ctrl+Shift+N打开新窗口,欢迎页就会作为起点出现。这个折中方案既保留了项目恢复的便利,又给了我从欢迎页重新选择项目的能力。
如果你真的需要“打开始终是 welcome 界面”,不要犹豫,直接把restoreWindows设为none,然后接受“每次启动都是全新窗口”这个事实。这样才能做到标题里说的“始终”。改完记得彻底退出重启,别让后台进程给你留着旧状态。配置看起来就两行,但背后的窗口逻辑和配置层级,才是真正会绊住人的地方。