vimで増えすぎたスワップファイルからファイルを復元する

vimで同名ファイルのスワップファイルが作成される場合、 .swp, .swo, ..., .sva, ... みたいに作成される毎に拡張子を一文字ずつずらしていくらしい

自分の場合、vimrcのdirectoryに /tmp 以外を指定していたので、 自動削除されずに無名のスワップファイルがすごい量になっちゃってて拡張子が*.sss とか *.srv までいっていた

拡張子毎の復元方法

1. *.sw[a-z]

ファイル名指定、スワップファイル直接指定で復元可能 ファイル名指定で復元候補に表示されるのもこの拡張子の範囲まで

Windowsで無名ファイルを復元する場合

:recovery _
:recovery /tmp/_.swp
vim -r _
vim -r /tmp/_.swp

2. *.s[uv][a-z]

スワップファイル直接指定でのみ復元可能

Windowsで無名ファイルを復元する場合

:recovery /tmp/_.svz
vim -r /tmp/_.svz

3. *.s[uvw][a-z] 以外

*.s[uvw][a-z] の範囲内に拡張子をリネームして、上記1か2を実行する

Windowsで無名ファイルを復元する場合

!mv /tmp/_.stz /tmp/_.sua
:recovery /tmp/_.sua
mv /tmp/_.stz /tmp/_.sua
vim -r /tmp/_.sua

:recovery や vim -r でファイル名指定で復元できるのは

*.sw[a-z] だけ、*.s[uv][a-z] は スワップファイル自体を直接指定する必要がある

それ以外の拡張子は *.s[uvw][a-z] の範囲内に拡張子をリネームしてから復元を実行する

*.s[uvw][a-z] なファイルは vim -r _.sua:recover _.sua みたいに直接swapファイルを指定しても復元できる

ただ *.stz からはダメっぽい。

そうなったら素直にswapファイルとして解釈してくれる範囲内に拡張子をリネームして、実行すればうまく復元してくれる

Vim documentation: usr_11