Humanity

Edit the world by your favorite way

Vim で無名バッファを復元する方法

TL;DR

  1. スワップファイルを残したディレクトリに :cd して、
  2. :new 等で)無名バッファを開き、
  3. :recover を実行する。

説明

デフォルトだと Vim はそのファイルを開いた時点に復元するかどうかのダイアログを表示すると思います。 というか自分はスワップファイルから復元したい場合は常にその方法で復元していました。

recover - Vim日本語ドキュメント

:rec[over] [file]       スワップファイルから[file]を回復するよう試みる。もし
                        [file]が与えられていない場合は、現在のバッファの名前が
                        用いられる。現在のバッファの内容は失われる。このコマン
                        ドはバッファが修正を加えられている場合に失敗する。

:rec[over]! [file]      ":recover" と同じだが、現在のバッファに対するどんな変
                        更も失われる。

ご覧の通り :recover はファイル名を指定する事でそのファイルをスワップから復元できます。 しかし無名バッファの場合は [file] が渡せないので、無名バッファを開いた状態で :recover と引数無しで呼ぶ事で無名バッファの復元を行えます。

(どうでもいい)経緯

自分は今まで無名バッファの場合もスワップファイルが作られるのを知りながらなぜかいつも諦めたりしていました(まぁ無名バッファに書く内容なんて大した事ないメモ書きが多い事もありますが)。 ただ今回失われるのも惜しいって事で初めて調べた結果、冒頭の方法が分かりました(初めて)。 習慣とか思考停止怖い。

おまけ: :retab! でインデントをタブやスペースに変換したりできる

これまで自分は :retab はタブからスペースへの変換にしか使えないと思い込んでいましたが、 :retab!! を付ければ、'expandtab' オプションがオンであればスペース、オフであればタブに変換されます。

普通に知ってるよって人も多いでしょうが、思い込みって怖いですね(わざわざタブへの変換用に :Unretab とかいうコマンドを自作していた思い出)。