我可以有VS代码跳过打开以前的工作空间一次?



我一整天都在使用许多VS Code工作区。它们中的大多数都是由nfs挂载驱动器上的目录支持的,这些驱动器只有在我使用VPN连接到雇主的网络时才会挂载。在没有VPN的情况下打开VS Code会导致我所有的窗口关闭,让我留下空白/空的工作区,然后我必须在早上重新设置它们。这只需要几分钟的时间,但我很懒,而且它不整洁;我喜欢整洁的东西。我知道我可以在没有使用-n选项的情况下启动VS Code,这很好,但是下次我真正启动编辑器时(即为了工作目的),我所有的工作区都需要重新打开(参见之前的声明re:我很懒,我喜欢整洁的东西)。

是否有一种方法可以表明我想在没有任何项目的情况下启动VS Code,只是这一次,然后下次我开始时,我想要所有旧的工作区照常重新打开?另外,有人知道状态信息存储在哪里以及如何编辑它吗?我不介意把它保存下来,然后在我完成后恢复它。

没有任何奇迹的解决方案,我至少找到了正确的文件来操作:storage.json文件,在MacOS上可以找到:

~/Library/Application Support/Code/storage.json
我写了一个Perl脚本来做这个操作。当我想要"下线"的时候它在JSON文件中读取,循环通过打开的窗口,识别我不想要的,并使用jq删除它们,然后启动VS Code。当我准备回到"在线"时,我读取了原始文件的备份,寻找我以前删除的窗口,将它们添加回去(也使用jq),然后启动VS Code。 Perl脚本对于公开发布来说有点粗糙,但是人们可能会发现jq很有帮助。要删除,您需要将要删除的窗口标识为数组中的(从零开始的)索引,然后使用以下命令删除它们:
jq '. | del(.windowsState.openedWindows[1,2,5])' '/Users/me/backups/online-storage.json' >'/Users/me/Library/Application Support/Code/storage.json'

如果您想在某个时候重新添加它们,您可以从备份文件中提取完整的JSON位,然后使用以下命令将它们附加到数组的后面:

jq '.windowsState.openedWindows += [{"backupPath":"...",...,"workspaceIdentifier": {...}}, {"backupPath":"...",...,"workspaceIdentifier": {...}}, {"backupPath":"...",...,"workspaceIdentifier": {...}}]' '/Users/me/backups/offline-storage.json' >'/Users/me/Library/Application Support/Code/storage.json'

为清晰起见,插入的JSON被省略;当然,您需要包含完整的JSON字符串。我不知道排序有什么意义,所以把它们从数组中间拖出来然后把它们附加到数组的末尾可能会有一些后果;这对我的目的来说并不重要,但是YMMV。

最新更新