
Vim プロセスが突然終了すると (システム クラッシュなど)、SWP ファイルが残ります。後で Vim で元のファイルを開くと、回復のオプションが表示されます。私は頻繁に保存する習慣があるため、ほとんどの場合、回復されたファイルは保存されたファイルと同じです。その後、Vim は次のように言います。
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
さて、もちろん、今すぐ .swp ファイルを削除したいと思います。
この場合、Vim で SWP ファイルを常に自動的に削除するにはどうすればよいでしょうか?
これを行うための組み込み設定はないようですので、適切な自動コマンド イベントを探しています。
私が見つけた方法の 1 つは:e #
、メッセージの後に swap-exists オプションが再び表示されるようにして、「削除」することです。ただし、毎回これらの追加手順を実行する必要はありません。
答え1
注: 使用しているオペレーティング システムを明記していません。以下は Unix シェルで動作しますが、Windows を実行している場合は、必要最低限の機能を備えた Cygwin またはその他のシェルをダウンロードできます。
私も以前、あなたと同じように、:e
同じファイルを開いて再度実行し、リカバリ ファイルを削除するオプションを取得していました。クラッシュまたは予期しないコンピュータの再起動の後、スワップ ファイルで を実行して、残っている Vim リカバリ ファイルをすべてクリーンアップしvim -r
、リカバリを続行します。
ファイルがないかわった
ファイルが変更されていない場合は、リカバリ ファイルをすぐに削除します。Vim がこれを自動的に実行できればすばらしいのですが、残念ながらそうではありません。
ファイルが変更されたとき
ファイルが変更されている場合は、 コマンドを実行して、DiffOrig
元のバージョンと復元されたバージョンの違いを比較します。復元ファイルの変更に満足している場合は、 コマンドを使用してファイルを保存して終了します:x
。満足していない場合は、 を使用して終了し、復元された変更を破棄します:q!
。復元ファイルが保存されたファイルに関連付けられていない場合 (例: )、.swp
通常は を使用して、:w filename
復元されたバッファをファイル名の付いたファイルに保存します。
DiffOrig ヘルパー
私は追加しました差分元.vimrc
いつでも利用できるようにコマンドを my に追加します。
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
シェルスクリプト
私はシェルで次のスクリプトを実行して、現在のディレクトリツリー内のすべてのスワップファイルを検索します。各スワップファイルは、Vimを次のように開くために使用されます。"リカバリモード"Vim が閉じられると削除されます。
find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;
このrm -i
オプションでy
は、ファイルを削除するには確認 ( ) が必要です。より確実に削除してプロセスを高速化したい場合は、これを省略できます。