我试图在工作和家中同步VS Code实例,包括打开文件列表。 我知道有同步设置的扩展,但它们不包括Open Files AFAIK。 我不希望在运行实例下进行实时同步,但如果我重新启动两台机器并启动它们的代码,我希望它们完全相同。
目前,我在OneDrive上安装了可移植的Code代码,并且我也试图将AppData \ Roaming \ Code移动到OneDrive,用实际目录替换为此副本的符号链接。
但是,当我在家里打开编辑器时,它有自己的一组Open Files。
我尝试使用ProcMon来了解它的来源,我试图稍微阅读一下。似乎要求可能更容易: - )
顺便说一下,我在我项目的Code git文件夹中打开了。此文件夹位于两台PC上的相同路径上。
答案 0 :(得分:12)
我很确定你是AppData\Roaming\Code
是有问题的地方。具体做法是:
AppData\Roaming\Code\storage.json
以及windowsState
部分。AppData\Roaming\Code\Backups\workspaces.json
在退出代码(文件>退出)之前,这些文件(或至少storage.json
)不会更新。如果您在工作机器上打开代码并且在到达家用机器时没有看到更改,那么这可能就是您没有看到预期的原因。
Code / Atom还将状态信息存储在sqlite3数据库中,并将大量状态信息存储在那里:
AppData\Roaming\Code\Local Storage\file__0.localstorage
使用SQLite浏览器工具(例如http://sqlitebrowser.org/)将其打开。您将在表ItemTable
中看到许多熟悉的路径引用。列value
显示为" BLOB" (二进制)但您可以单击任何行并将数据导出到文件。这样做并在文本编辑器中打开它(例如Code!:)),你会发现它只是一个JSON字符串。
(由于VS Code基于GitHub的Atom编辑器,使用" Atom"而不是" Code"搜索问题,通常会挖掘您可能无法找到的信息。 )
答案 1 :(得分:1)
我完全同意@Jonathan,并想补充一点。
对于该问题,打开的文件存储在file__0.localstorage
中,这是一个sqlite文件。我只是编写了一些代码以提取打开文件的列表。希望对您有所帮助。
import sqlite3
import pandas as pd
import json
fn = r"C:\Users\HelloWorld\AppData\Roaming\Code\Local Storage\file__0.localstorage"
conn = sqlite3.connect(fn)
df = pd.read_sql("select key, value as _value from ItemTable", conn)
df["v"] = df.pop("_value").map(lambda x: x.decode("utf-16"))
# should be choosen carefully
known_file_opened = "numpy"
known_file_closed = "aws"
df_check = df[
df.v.str.contains(known_file_opened)
&(~df.v.str.contains(known_file_closed))
]
assert len(df_check) == 1
js = json.loads(df_check.v.iloc[0])
editors = js["groups"][0]["editors"]
print("Found %d editors" %(len(editors)))
paths = []
for editor in editors:
js_ = json.loads(editor["value"])
path = js_["resourceJSON"]["fsPath"]
paths.append(path)
print("Found opened file list:\n%s" %(paths))