VSCode の HotExit を使う時の注意
◆ 開いたフォルダのパスをベースにしてるので フォルダ名を変えたり移動すると未保存ファイルが復元されなくなる
◆ VSCode のバックアップフォルダには残るので フォルダ名を変えて未保存ファイルが消えてしまっても自分で探せる
◆ VSCode のバックアップフォルダには残るので フォルダ名を変えて未保存ファイルが消えてしまっても自分で探せる
HotExit
VSCode ではファイルに保存していない Untitled ファイルを保持して VSCode を終了させられますメニューバーの File から Exit を選んだときや HotExit の設定で onExitAndWindowClose を選んだ状態でウィンドウを閉じたときに未保存のファイルを保存しないまま閉じれて 次回の起動時に復元されます
詳細は以前の記事参照
フォルダのパスが変わると
便利なので ずっと保存しておくものではなく 作業が終われば消す一時メモみたいなもので多用していましたが 少し危ない罠もありました考えてみればわかることですが 未保存ファイルはフォルダ内には保存されていません
VSCode のフォルダ内にバックアップとして保存されています
同じパスのフォルダを開いてるから復元できていますが フォルダ名を変えたり入れ替えたりすると正しく復元できない気がします
試しに a というフォルダを作り VSCode で開いて未保存ファイルに適当なテキストを打ち込んでウィンドウを閉じます
VSCode を起動してフォルダ a を開いて復元できることを確認します
次は VSCode を閉じてる状態で a を b にリネームします
VSCode を起動してフォルダ b を開きます
予想通り未保存ファイルは復元されませんでした
今度は VSCode を閉じてる状態で さっきの a とは関係ない適当なフォルダをリネームして a にします
この a フォルダを VSCode で開くとさっきの未保存ファイルが復元されました
パスベースなので仕方ないですが 完全にフォルダと対応させて保存してるわけじゃないので フォルダの名前や場所の変更には注意が必要です
未保存ファイルの場所
フォルダ名を変えてしまって未保存ファイルを復元できなくなっても VSCode のフォルダ内に残ってるので直接開いてファイルを復元できます場所はこういう感じ
C:\Users\user1\AppData\Roaming\Code\Backups\
f4f3a32a9c102f331c4d8ec11b5a0c99\untitled\-7f9c1a2e
Code フォルダ内に Backups フォルダがあってここに未保存ファイルが保存されます
VSCode のウィンドウ(ワークスペース)ごとにフォルダが作られます
このフォルダ名は フォルダを開いたワークスペースの場合は上の例のようなハッシュ値で フォルダを開かないワークスペースの場合はタイムスタンプの数値がフォルダ名になってます
この中に file フォルダと untitled フォルダがあります
既存ファイルを編集している場合の未保存データは file フォルダに保存され 新規ファイルの未保存データは untitled フォルダに保存されます
ハッシュ値
ハッシュ値なので ひと目見てもどれが目的のフォルダかわかりませんが ハッシュ値は単純にフォルダのパスを小文字化して MD5 を求めてるだけです「C:\Data\Dir」 というフォルダを VSCode で開き未保存ファイルを残してウィンドウを閉じて Backups フォルダを見ると次の名前のフォルダが作られていました
aa91cd5d0ec4e4a4b29c46aa052b72a1
フォルダのパスの MD5 を求めます
Node.js でやります
md5.js
console.log(require("crypto").createHash("md5").update(process.argv[2] || "").digest("hex"))
PS C:\tmp> node md5.js "c:\data\dir"
aa91cd5d0ec4e4a4b29c46aa052b72a1
一緒ですね
本来の名前の大文字だと
PS C:\tmp> node md5.js "C:\Data\Dir"
6e190f17132a1656819acfa16d7a9035
となってしまいます
また Backups フォルダにある workspaces.json の中には file プロトコルで file:///c%3A/Data/Dir のように保存されますが ハッシュ値の元は Windows 上のパス表記でした
Windows だとファイル・フォルダの大文字小文字は区別されないので全部小文字化してるのでしょうけど Mac や Linux のファイルシステムだと大文字小文字を区別するので 小文字化しないのかもしれません
わざわざ MD5 を計算しなくても VSCode のウィンドウを閉じるときに未保存がなければこのフォルダも消されるので多数のワークスペースを使っていなければフォルダ数は多くないはずです
元のパスをはっきり覚えてないこともあるでしょうし単純に順番に見ていってもいいかもしれません