Vim 標準の recover 機能はわかりにくい
swapファイルが見つかった場合にどのように対処すべきか という記事も見つけたけれど、僕は2手以上のコマンドは覚えられない。
Recover.vim
Recover.vim なるソフトを見つけた。
:RecoverPluginDisable
で無効化。:RecoverPluginEnable
で有効化。:RecoverPluginHelp
でヘルプを表示。
swp ファイルを見つけると、D[i]ff というオプションを追加したダイアログ画面を表示する。Vim のデフォルトのオプションを表示したい場合は CTRL-C で表示できる。
Diff すると、左が保存されているファイル、右が swp ファイルの中身という形式で diff 画面が表示される。あとはいつもの vimdiff のように使える。(do
, du
, :diffput
, :diffget
)
右画面(swp が表示されている画面)が最終的に保存される画面なので、欲しいデータは左画面から右画面へ持っていく(不要な追加分を削除する)ようにファイルを変更する。
終了するときは :FinishRecovery
とすれば、swp ファイルの削除・diff 画面を閉じる などを自動でやってくれる。このとき残るのは、前記から推測できるように右側のウィンドウ(swp ファイル側)である。 swp ファイルを削除してしまうので、このコマンドを実行するときはリカバリがちゃんと終了していることを確認すべき。
ちなみにこのプラグインを入れていると、swp ファイルの中身と保存されているファイルの中身とが同一であった場合、「中身が同一ですが、diff とかせずに swp を消してもいいですか?」と尋ねられる。かしこい。
いいところと悪いところ
- 覚えることが「右画面で保存したいファイルを完成させる」「リカバリを終えるときは
:FinishRecovery
を忘れない」だけでいい。 - 何も考えなくても、swp ファイルを見つけたらすぐに diff できるのはいい。
:FinishRecovery
を忘れがちで、これを忘れると swp ファイルを削除してくれないのでまた「Diff しますか?」と尋ねられる(まぁそのときに swp を消せと言えばいいのだが)のは悪い(忘れるのが悪いといえばそうなのだが)。