Vimでプログラムを編集している最中に突然ファイルが固まってクラッシュして焦ることが一度はあると思います。
Vimエディタでは、直前の編集内容の保存が完了していなくても復元できるSWAPファイルが残るようになっています。
この記事では、VimのSWAPファイルからの復元方法と、不要なSWAPファイルを一括削除する方法をご紹介します。
この記事の内容
SWAPファイルからの復元方法
Vimでファイルの編集中にクラッシュした場合、「編集中のファイル名.swp」のSWAPファイルが生成されます。
以下の例では、hello.phpファイルの編集途中でファイルがクラッシュしてしまい、記述していた内容が消えてしまいました。
再度Vimエディタで通常どおり開いても、クラッシュ時に記述した内容は反映されていません。そのため、SWAPファイルを利用してクラッシュ直前の上記の状態を復元します。
SWAPファイルから内容を復元したい場合には次の方法があります。
方法1: Vim起動時にSWAPファイルの復元を選択する
VimでSWAPファイル(.swp)が存在するファイルの場合、ファイルを開くタイミングで復元することができます。手順は次のとおりです。
- SWAPファイル(.swp)が存在する状態で、VimエディタでSWAP元のファイルを開きます。
- 例:SWAPファイル(.hello.php.swp)が存在する状態で、Vimエディタでhello.phpファイルを開きます。
- スワップファイルのメニューが表示されるので、復元する「R」キーを入力します。
- リカバリ完了のメッセージが表示されるので、メッセージの通りにEnterキーまたは何らかのコマンドを入力します。
- ファイルをスワップファイルから復元できました。
- 復元後は保存されていない状態なので終了時は「:w」などの保存コマンドを忘れないでください。
方法2: 「recover」コマンドを使用してSWAPファイルから復元する
スワップファイルの確認時に「O」(読み取り専用)や「E」(とにかく編集する)を入力して、ファイルをそのまま開いてしまう場合があると思います。
クラッシュしたファイルを開いた状態でSWAPファイルを利用して復元するには、次の手順で操作します。
- ノーマルモードの状態で、recoverコマンドを実行してSWAPファイルの内容を復元します。
:recover ファイル名
- 読み取り専用で開いた場合は、「:recover」の後に「!」(強制実行)を付ける必要があります。
- 例では、クラッシュ直前のfunction編集は反映されていない状態です。
- リカバリ完了のメッセージが表示されるので、メッセージの通りにEnterキーまたは何らかのコマンドを入力します。
- SWAPファイルから内容を復元できました。
方法3: Vimエディタ起動時に「-r」オプションを指定する
SWAP元のファイルが既に破損や削除されてしまっていて開けない場合は、次の手順で復元することができます。
- コマンドラインで次のコマンドを実行し、SWAPファイルをベースに元のファイルを生成します。
vim -r ファイル名
- 例:SWAP元のファイル「hello.php」を復元する場合は、次のコマンドを実行します。
vim -r hello.php
- 例:SWAP元のファイル「hello.php」を復元する場合は、次のコマンドを実行します。
- リカバリ完了のメッセージが表示されるので、メッセージの通りにEnterキーまたは何らかのコマンドを入力します。
- ファイルが復元できました。
不要なSWAPファイルを一括で削除する
古いSWAPファイルを一括で削除したい場合は、コマンドラインからワイルドカード検索により削除する方法が便利です。
各OSでは、次のコマンドをコマンドライン上で実行すると、SWAPファイルを一括削除することができます。
- Mac、Linuxの場合
find . -name '.*.swp'|xargs rm
- Windowsの場合
del /ah *.swp
- SWAPファイルが隠しファイルのため、「/ah」を付けて下さい。
以上、VimエディタでSWAPファイルを復元する方法と不要ファイルの削除方法でした。
コメント