VS Code存储打开文件列表的位置?

时间:2017-12-28 20:44:33

标签: visual-studio-code

我试图在工作和家中同步VS Code实例,包括打开文件列表。 我知道有同步设置的扩展,但它们不包括Open Files AFAIK。 我不希望在运行实例下进行实时同步,但如果我重新启动两台机器并启动它们的代码,我希望它们完全相同。

目前,我在OneDrive上安装了可移植的Code代码,并且我也试图将AppData \ Roaming \ Code移动到OneDrive,用实际目录替换为此副本的符号链接。

但是,当我在家里打开编辑器时,它有自己的一组Open Files。

我尝试使用ProcMon来了解它的来源,我试图稍微阅读一下。似乎要求可能更容易: - )

顺便说一下,我在我项目的Code git文件夹中打开了。此文件夹位于两台PC上的相同路径上。

2 个答案:

答案 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))
相关问题