VS Codeは関連するメタデータをすべて.vscode
フォルダと.code-workspace
ファイルに保存し、これらはワークスペースフォルダ内に含まれているので、すべてが自己完結型であり、移動しても問題は発生しないと思っていました。しかし、どうやら私は重大な誤り。
ワークスペースフォルダを新しい場所に移動した後、.code-workspace
ファイルに保存されているフォルダパスを適宜変更する開いたエディタパネルと下部パネルがすべて消えてしまいました。今あるのはいらっしゃいませ窓。
公式ガイドの内容は知っています推奨ただし、これは.code-worskpace
メタファイルを移動しているだけであり、フォルダーはそのまま残ります。
ベストアンサー1
私も同じ問題に遭遇しました。ワークスペースはファイルに保存されませんでした (各プロジェクト フォルダーで [コードで開く] オプションを使用しているだけです)。また、[ワークスペースに名前を付けて保存] オプションも役に立ちませんでした。空のオブジェクトがいくつか入った JSON ファイルが作成されただけです (ワークスペース設定を実際に変更していないので、開いているエディターなどを保存したいだけなので、おそらく理にかなっています)。
少なくともWindowsでは、そのような「ワークスペース」設定は実際には以下のサブフォルダ内に保存されているようです。%APPDATA%\コード\ユーザー\ワークスペースストレージ、実際の設定を保存するために SQLite データベース ファイルが使用されるため、最終的に次の操作を実行しました。
フォルダをディスク上の新しい場所に移動します(まずすべての VS Code ウィンドウを閉じます)
VS Code で新しいフォルダーの場所を開きます (この段階では [ようこそ] タブが表示されますが、これは新しい場所の設定保存フォルダーを作成するために必要です)。次に、VS Code をもう一度閉じます。
開ける%APPDATA%\コード\ユーザー\ワークスペースストレージファイルエクスプローラーで各サブフォルダに移動し、ワークスペース.json(古いテキストエディタならどこでも)。少なくとも私の場合は、フォルダプロパティは、この設定フォルダが関連するフォルダのパスです(ただし、これを変更しても何の役にも立ちません。最初に試したのはこれです)。これを使用して、これらのサブフォルダのどれが関連するかを判断します。古いそして新しいパス。
コピー状態.vscdbから古いに新しい、削除状態.vscdb.バックアップで新しい。
開ける状態.vscdbで新しい何らかのSQLiteデータベースファイルエディタ(私はSQLite 用 DB ブラウザそれはうまくいきましたが、SQLiteスタジオ全体的には良いかもしれないようです。
UPDATE クエリを実行して、データベース内のすべてのパスを更新します。これらは、3 つの異なる形式/エスケープ レベルで保存されているようです。フォルダー間には、スラッシュ、2 つのバックスラッシュ、または 4 つのバックスラッシュを使用できます。私の場合、プロジェクト フォルダーを Windows ユーザー フォルダーのルートから OneDrive 内にある通常のドキュメント フォルダーに移動したかったので、各パスの中央部分を変更するだけで済むため、クエリは次のようになります。たとえば、別のドライブに移動する場合は、より複雑な操作が必要になる場合があります (データベース内のすべての既存のパスを調べて、それらがどのようにエンコードされているかを確認する必要があります)。
UPDATE `ItemTable` SET `value` = REPLACE(REPLACE(REPLACE(`value`, 'User/Project', 'User/OneDrive/Documents/Project'), 'User\\Project', 'User\\OneDrive\\Documents\\Project'), 'User\\\\Project', 'User\\\\OneDrive\\\\Documents\\\\Project')
データベースを保存した後、VS Code で新しいフォルダーを開くと、すべてが古い場所とまったく同じように読み込まれたようです :)
(また、もし興味があれば、workspaceStorage のサブフォルダー名はパスに基づいたハッシュのようなもののようです。これは、VS Code で以前開いたフォルダーに関連するサブフォルダーを削除し、そのフォルダーを再度 Code で開くと、同じサブフォルダー名が再作成されるためです。つまり、古い Workspace.json とデータベース ファイルをその場で更新するだけでは機能しません)