Vim-復元後に元のファイルが変更されない後、SWPファイルを自動的に削除します


9

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オプションが再び表示されるようにすることです。その後、「削除」できます。しかし、実際に毎回これらの追加の手順を実行する必要はありません。


ありがとう!あなたの:e #トリックは、理想的ではありませんが、以下の現在の答えよりもさらに有用であることがわかりました。:-)
RayLuo

回答:


5

注:使用しているオペレーティングシステムはまだ明らかにしていません。以下はUnixシェルで動作しますが、Windowsを実行している場合は、必要最低限​​のCygwinまたは他のシェルをダウンロードできます。

私はあなたと同じことをしていました、実行:eして同じファイルを再度開き、リカバリファイルを削除するオプションを取得しました。クラッシュまたは予期しないコンピュータの再起動後、vim -rスワップファイルで実行して回復を続行することにより、残りのVim回復ファイルをすべてクリーンアップします。

ファイルが変更されていない場合

ファイルが変更されていない場合は、リカバリファイルをすぐに削除します。Vimがこれを自動的に実行できればすばらしいのですが、残念ながらできません。

ファイルが変更されたとき

ファイルが変更されている場合は、DiffOrigコマンドを実行して、元のバージョンと復元されたバージョンの違いを比較します。リカバリファイルからの変更に満足したら、:xコマンドでファイルを保存して終了します。そうでない場合は、で終了して、復元した変更を破棄し:q!ます。リカバリファイルが保存されたファイルに関連付けられていない場合(例:)、.swp通常はを使用し:w filenameて、リカバリされたバッファをファイル名の付いたファイルに保存します。

DiffOrigヘルパー

DiffOrigコマンドをmy に追加して、.vimrc常に使用できるようにしました。

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、ファイルを削除するために確認()が必要です。自信があり、プロセスをスピードアップしたい場合は、これを省略できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.