Vim - リカバリ後に元のファイルは変更されず、SWP ファイルを自動的に削除します

Vim - リカバリ後に元のファイルは変更されず、SWP ファイルを自動的に削除します

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は、ファイルを削除するには確認 ( ) が必要です。より確実に削除してプロセスを高速化したい場合は、これを省略できます。

関連情報