Vim - secara otomatis menghapus file SWP setelah pemulihan tidak mengubah file asli

9

Ketika proses Vim tiba-tiba dihentikan (misalnya sistem crash), ia meninggalkan file SWP. Membuka file asli di Vim nanti memberikan opsi pemulihan. Sebagian besar waktu file yang dipulihkan sama dengan file yang disimpan, karena saya punya kebiasaan sering menabung. Lalu Vim berkata:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Yah, tentu saja saya ingin menghapus file .swp sekarang!

Bagaimana saya bisa membuat Vim selalu menghapus file SWP secara otomatis dalam kasus ini?

Sepertinya tidak ada pengaturan bawaan untuk melakukan ini, jadi saya mencari acara perintah otomatis yang sesuai.

Salah satu cara yang saya temukan adalah :e #setelah pesan, yang menyebabkan opsi swap-ada muncul lagi, maka saya bisa "Hapus Itu". Tetapi saya tidak benar-benar harus melakukan langkah-langkah ekstra setiap kali.

Evgeni Sergeev
sumber
Terima kasih! Saya menemukan :e #trik Anda , meskipun tidak ideal, tetapi masih lebih bermanfaat daripada jawaban saat ini di bawah. :-)
RayLuo

Jawaban:

5

Catatan: Anda belum mengatakan sistem operasi mana yang Anda gunakan. Berikut ini berfungsi dengan shell Unix tetapi jika menjalankan Windows, Anda dapat mengunduh Cygwin tanpa tulang atau shell lain.

Saya dulu melakukan hal yang sama seperti Anda, jalankan :euntuk membuka kembali file yang sama untuk mendapatkan opsi untuk menghapus file pemulihan. Setelah crash atau komputer tidak terduga restart, saya membersihkan semua file pemulihan Vim yang tersisa dengan menjalankan vim -rpada file swap dan membiarkan pemulihan melanjutkan.

Ketika file belum berubah

Jika file belum berubah, saya ingin segera menghapus file pemulihan. Akan lebih bagus jika Vim bisa melakukan ini secara otomatis tetapi sayangnya tidak.

Ketika file telah berubah

Jika file telah berubah, saya menjalankan DiffOrigperintah untuk membandingkan perbedaan antara versi asli dan yang dipulihkan. Jika saya senang dengan perubahan dari file pemulihan, saya keluar dengan menyimpan file dengan :xperintah. Jika tidak, saya membuang perubahan yang dipulihkan dengan berhenti menggunakan :q!. Jika file pemulihan tidak terkait dengan file yang disimpan, misalnya .swp, saya biasanya menggunakan :w filenameuntuk menyimpan buffer yang dipulihkan ke file dengan nama file.

Pembantu DiffOrig

Saya menambahkan perintah DiffOrig ke saya .vimrcsehingga selalu tersedia.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Skrip shell

Saya menjalankan skrip berikut di shell saya untuk menemukan setiap swap-file di pohon direktori saat ini. Setiap swap-file kemudian digunakan untuk membuka Vim dalam "mode pemulihan" dan kemudian dihapus setelah Vim ditutup.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

The rm -ipilihan memerlukan konfirmasi ( y) untuk menghapus file. Jika Anda lebih percaya diri dan ingin mempercepat prosesnya, ini bisa dihilangkan.

Anthony Geoghegan
sumber