Visual Studio Code无法重新打开之前的文件或文件夹

75

我和这个问题完全相反:Visual Studio Code 总是重新打开以前的文件或文件夹

VSCode似乎从不记住我上次打开的文件,总是打开一个空白窗口。我检查了快捷方式是否意外地加了参数“-n”(会导致这种行为),但没有。

是否有一种方法强制VSCode记住已打开的文件和文件夹?


6
2016年11月发布的版本中已经实现了“热退出”,但直到2017年1月为止,只有脏文件(未保存的文件)能够在多个会话中被记忆。如果没有打开的文件夹,则重新启动VS Code时不会重新打开已保存的文件。这一功能尚未被实现,在此处进行跟踪:https://github.com/Microsoft/vscode/issues/207。 - Otiel
这个问题应该可以通过VSCode 1.52(2020年11月)以及新的window.reopenFolders=preserve选项来解决。请参阅下面我更新后的答案 - VonC
8个回答

70

看起来,只有在打开文件夹的情况下,VsCode 才会记住已打开的文件。 无论这是驱动器上的一个虚拟文件夹还是其他位置,如果您打开此文件夹之外的文件,它们也将被记住。

我不确定这是否是设计问题或者是个bug。

编辑: 这是一个 bug 并在这里跟踪。

编辑2: 总结以下答案,现在有两个设置涉及此问题:

热退出已实现,在关闭 VS Code 之前恢复未保存的文件。 要更改此设置,请使用以下设置:

files.hotExit: "onExit"

要重新打开所有文件,请使用此设置:

window.restoreWindows: "all"

但是这里仍然存在一个未解决的问题,可以在这里找到。

...


7
我在MacOS High Sierra上使用VS Code。如果只是关闭窗口然后重新打开,那么"window.restoreWindows": "all"不起作用。 只有在我退出并重新启动VS Code时才能起作用。 - skarfa
1
你能更明确地解释一下“关闭窗口-重新打开”和“退出-重新启动”这些术语吗?如果你指的是文件菜单中的“关闭窗口”选项,对我来说,这也可以正常工作——但我使用的是Windows系统。 - phifi
1
虽然这个问题还没有解决,但一个解决方法是:将window.restoreWindows设置为all,然后编写一个脚本,首先以无参数的方式启动代码,然后再以带参数的方式启动它。例如,在Windows上,我编写了一个批处理文件“open-in-vscode.bat”,它只包含以下内容: "C:\Program Files\Microsoft VS Code\bin\code" && "C:\Program Files\Microsoft VS Code\bin\code" %* - Antonio Maiorano
如果我关闭窗口并使用命令行重新打开到同一文件夹,那么旧的编辑器将重新打开。我不想要这个。 - William Entriken

21

前往: 打开文件 --> 首选项 --> 设置,然后在settings.json文件中添加"window.restoreWindows": "all"。 请确保在前一语句之后加上逗号。

这将重新打开您在上次会话结束时打开的所有窗口。


看起来你没有阅读被接受的答案,因为这个问题已经在那里得到了解决。 - phifi
5
语法不正确。window.restoreWindows": "all"。我需要50个声望才能发表评论,所以这是唯一的方式。 - Lews Therin
1
你的意思是,你需要50个声望才能编辑你的帖子?我已经为你纠正了。 - phifi
使用 "preserve" 而不是 "all",即使在文件浏览器(Mac 上的 Finder)中打开任何文件时选择 "Open with Visual Studio Code",也会恢复先前打开的编辑器选项卡。否则(即使使用 "all" 选项),它们也不会被恢复。 - informatik01

11
你可以尝试设置选项:

您可以尝试设置选项:

"window.reopenFolders": "all"

这应该会重新打开你关闭编辑器时打开的所有内容,但我没有测试过。通常我更喜欢没有重新打开任何内容,因此我使用none。默认值为one


7
我尝试了,但没有成功。看起来,这不会影响未打开文件夹的已打开文件。 - phifi
2
看起来这个设置已经更新为 "window.restoreWindows": "all"。仍然包含所有选项:'none'、'one'、'folders'或'all'。至少对我来说,这是解决的方法。 - dlchang
@anhtv13 通过快捷键 [CTRL] + [,] 或通过菜单“文件 --> 首选项 --> 设置”进行设置。 - phifi

5
所以我也需要这个功能,目前只有这个。
"window.restoreWindows": "none",

在设置中。

控制重启后窗口如何重新打开。选择“无”始终使用空工作区开始,“一个”重新打开您上次使用的窗口,“文件夹”重新打开所有已打开文件夹的窗口或“全部”重新打开您上次会话的所有窗口。


1
你说得对,这解决了问题 - 我只是忘记了双重检查,是否安装了最新版本的VS Code。从1.16.1版本开始,它现在按照我预期的方式工作。不过,我第一条评论中提到的问题仍然存在。我会将其编辑到我的第一个答案中... - phifi

5

他们在2016年11月添加了这个功能

以下是更改热退出行为的设置:

"files.hotExit": "onExit"

4

我尝试了window.reopenFolders选项,发现如果从桌面图标启动VSCode,则文件夹和文件将重新打开,但是如果我在资源管理器中单击一个文件并使用VSCode打开它(而且VSCode当前没有运行),则先前的文件夹和文件不会打开。我不确定是否有解决方法。


好的观点,我从未过多关注这一点,但在提到它之后,我现在知道为什么甚至工作区文件夹有时也无法记住或重新打开。 看起来在使用VSCode打开任何其他文件时,先前的工作区将被重置。 - phifi
这个bug太大了,再加上VS Code无法重新打开未保存的文件,现在根本无法使用... - Jérôme MEVEL

3

这也适用于 VSCode 1.42 (2020年第一季度) 在意外关闭时(例如操作系统更新时的 OS 重启,或任何强制终止 VSCode 的情况)。

请参见 vscode/issue 12058 ("定期保存 UI 状态以防止关闭时丢失") 和 PR 87158,其中包括以下评论:commit 54ab792

    // In some environments we do not get enough time to persist state on shutdown.
    // In other cases, VSCode might crash, so we periodically save state to reduce
    // the chance of loosing any state.
    // The window loosing focus is a good indication that the user has stopped working
    // in that window so we pick that at a time to collect state.

bpasero 添加了在问题中:

推送了一个更改(#87158),将会:

  • 每60秒保存状态
  • 当窗口失去焦点时保存状态

真正的解决方案是Electron提供API来检测Windows系统关闭情况(例如,electron/electron#15620所建议的)。

尽管在我的测试中,当任何非VSCode界面弹出时(例如,Windows提示应用程序更新),这些更改可能不会在VSCode有焦点且窗口重启时起作用。
我认为这是我们现在能做的最好的办法。


关于在问题15949中提到的window.reopenFolders=all最近的评论(2020年9月)说明它仍未解决。

2020年11月更新 问题15949 在VSCode 1.52中:

窗口还原选项的总和将是:
  • preserve (新): 所有窗口都会被还原,无论VSCode如何启动。
  • all: 所有窗口都会被还原,但不包括在文件或文件夹上启动VSCode时。
  • folders: 仅文件夹将被还原,但不包括在文件或文件夹上启动VSCode时。
  • one: 只有一个窗口将被还原,但不包括在文件或文件夹上启动VSCode时。
  • none: 永远不会还原任何窗口。
我已经推出了window.restoreWindows: preserve作为新选择。 all仍然是默认选项。
参见:

新设置:恢复上次会话窗口

新增了一个名为preserve的设置值,可用于现有的window.restoreWindows设置。该设置允许在启动VSCode时强制恢复关闭VSCode之前打开的所有窗口,即使VSCode被明确要求打开特定文件夹或文件。

一个常见的例子是双击文件以在VSCode中打开它,或者使用终端打开特定文件或文件夹。
如果没有window.restoreWindows:preserve,则在这种情况下,VSCode只会按照指示打开文件或文件夹,但不会恢复任何其他窗口。


在VSCoe 1.60(2021年8月)中,您还可以:

在编辑器无法恢复时保持编辑器打开状态

到目前为止,当编辑器在窗口重新加载或应用程序重新启动后无法恢复时,编辑器将自动关闭,直到找到成功加载的编辑器为止。这种行为可能会导致令人沮丧的结果,因为精心创建的编辑器布局和排列会消失。通过此版本发布,曾经成功打开的编辑器将不会关闭,即使无法恢复也是如此。编辑器指示问题并提供重试操作的方法:https://media.githubusercontent.com/media/microsoft/vscode-docs/vnext/release-notes/images/1_60/keep-editor-open.png

非常感谢“保留”选项(与“全部”相比)。我遇到了一个问题:当我通过打开文件关闭VSCode时,只显示未保存的文件,而已保存的文件没有被打开。 - Max
@Max 那个(save)应该确实可行。我自己使用默认的“all”。 - VonC

2
对我来说,vscode中的设置已经是: "window.restoreWindows": "all",但它仍然不能在打开软件时打开以前的文件夹和窗口。
我所做的是将"window.restoreWindows": "none"设置,关闭vscode并重新打开它,然后将其设置回"window.restoreWindows": "all"。这样就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接