Pesan ini sebenarnya cukup penting jika Anda khawatir tidak kehilangan teks yang berpotensi tidak Anda simpan. Seharusnya tidak dianggap menjengkelkan, dan tidak boleh menyebabkan Anda buru-buru menghapus file swap atau mengkonfigurasi vim
untuk berjalan tanpa itu.
File apa pun yang Anda edit vim
akan memiliki file swap yang sesuai saat Anda mengedit , yang vim
digunakan untuk melacak perubahan. Ketika Anda berhenti mengedit file, vim
secara otomatis akan membuang file swap yang sesuai. Oleh karena itu, keberadaan file swap, dan upaya Anda untuk menulis melampaui file asli, harus menjadi pertimbangan dan tindakan yang tepat.
Dua skenario yang disajikan dalam pesan ( E325: ATTENTION Found a swap file
) sebenarnya cukup umum: (1) salah satu vim
program lain sedang mengedit file yang sama yang Anda coba edit (sebenarnya bisa orang lain - dalam hal ini benar - benar tidak masuk akal untuk hanya menghapus file swap secara membabi buta - atau itu bisa Anda di jendela terminal lain atau tab), atau (2)vim
sesi sebelumnya macet (paling sering ini terjadi ketika Anda mengedit jarak jauh, dan sesi jaringan terputus - di mana Jika sesi vim tidak keluar secara normal, dan .swp
file tetap tertinggal; contoh lain dari skenario kedua ini adalah Anda secara tidak sengaja menutup jendela atau tab terminal yang memiliki vim
sesi aktif atau berlatar belakang ).
Ketika saya menjumpai pesan ini, saya pertama kali berpikir apakah saya mengedit file ini di jendela atau tab terminal lain, karena saya biasanya beroperasi dengan beberapa jendela terminal dengan masing-masing beberapa tab:
Jika saya menyadari bahwa saya sedang mengedit di tempat lain, dan dapat kembali ke sana , saya kemudian tekan q
tombol untuk (Q)uit
sesi tambahan ini, dan kembali ke pengeditan melalui vim
sesi asli .
Kadang-kadang jika saya tidak sepenuhnya yakin, saya (Q)uit
kemudian berlari jobs
untuk memverifikasi apakah saya menjalankan vim
terminal yang sama persis; jika tidak ada yang muncul, saya berlari ps -ef | grep vim
untuk memeriksa apakah saya menjalankan di vim
tempat lain (yaitu di jendela atau tab terminal lain). Intinya, saya selalu mencoba untuk melanjutkan pengeditan melalui vim
sesi asli .
Jika saya yakin bahwa saya tidak dapat kembali ke sesi pengeditan asli, dan saya masih disajikan dengan opsi berikut, maka saya tekan r
untuk (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Menekan r
, Anda akan melihat pesan seperti ini:
Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Jika, di sisi lain, saya tidak lagi dihadapkan dengan opsi-opsi itu, karena saya berada di shell prompt, maka saya menjalankan vim
dengan -r
opsi, sebagai berikut:
vim -r notes
Pesan yang dihasilkan akan serupa:
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Either way, tekan ENTER
untuk melanjutkan, dan Anda akan melihat file Anda.
Catatan: Jika Vim ragu tentang apa yang ditemukannya, Vim akan memberikan pesan kesalahan dan menyisipkan baris dengan "???" dalam teks. Jika Anda melihat pesan kesalahan saat memulihkan, cari di file untuk "???" untuk melihat apa yang salah. Anda mungkin ingin memotong dan menempel untuk mendapatkan teks yang Anda butuhkan.
Komentar yang paling umum adalah "??? LINES MISSING". Ini berarti bahwa Vim tidak dapat membaca teks dari file asli. Ini dapat terjadi jika sistem macet dan sebagian file asli tidak disimpan.
Yang mengatakan, saya belum pernah melihat ???
tanda - tanda itu, jadi ini pasti kejadian yang benar-benar langka .
Selanjutnya, simpan (yaitu menulis) konten ke file lain (biasanya saya hanya menambahkan "2" ke akhir nama file asli):
:w notes2
Selanjutnya, keluar dari vim
sesi ini secara paksa :
:q!
Selanjutnya, bandingkan dua file:
diff notes notes2
Jika diff
pengembalian tidak ada , itu berarti tidak ada perbedaan, dan aman untuk menghapus file swap dan file kedua:
rm .notes.swp notes2
Pada titik ini, buka file asli dan lanjutkan seolah-olah tidak pernah ada masalah:
vim notes
Jika diff
mengembalikan sesuatu , itu berarti file asli (melalui file swap) memiliki perubahan itu, berkat pemulihan, telah disimpan ke file kedua.
Karena perubahan tersebut ditangkap dalam file kedua, Anda aman untuk menghapus file swap dan menimpa file asli dengan yang kedua:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
Pada titik ini, buka file asli dan lanjutkan seolah-olah tidak pernah ada masalah:
vim notes
Ini sepertinya banyak pekerjaan, tetapi begitu Anda terbiasa dengan alur kerja, dibutuhkan sekitar 20 detik maks.
vim -n file_name
Pesan yang ditempelkan menunjukkan Anda masih memiliki file "catatan" terbuka di sesi Vim lain. Jelas bukan ide yang baik untuk mengedit file yang sedang diedit di tempat lain.
Jika pesan itu salah, Anda perlu menentukan bagaimana sesi Vim Anda keluar dengan tidak tepat dan menghindarinya di masa mendatang.
Sedangkan untuk memulihkan, itu mungkin menjadi masalah dalam hal ini karena "catatan" lebih baru daripada file .im. Vw yang terkait dengannya, tetapi Anda masih dapat mencoba. Pastikan Anda menyalin file "catatan" Anda ke lokasi cadangan terlebih dahulu.
Akan menjadi ide yang bagus untuk membaca "
:help recover.txt
".Pelajaran di sini adalah bahwa Anda tidak seharusnya melihat pesan ini, dan bahwa Anda berarti Sesuatu yang Salah. Ini (mungkin) bukan kesalahan Vim.
Jika saat ini Anda masih benar-benar bertekad untuk tidak membiarkan Vim membuat file .swp agar Anda dapat pulih dari kerusakan dan masalah terkait lainnya, Anda dapat "
set noswapfile
" memasukkan~/.vimrc
.sumber
Anda bisa menggunakan -n untuk membuka vim tanpa menggunakan swapfile :
Untuk melakukan ini sepanjang waktu, cukup cantumkan
dalam file .bashrc atau .bash_aliases Anda
jika Anda perlu menjalankan vim tanpa opsi -n, jalankan saja
sumber
vim akan menghapus file .swp yang dihasilkan saat Anda keluar dengan benar.
sumber
Gunakan opsi pesan singkat di
~/.vimrc
:Yang juga merupakan default saat menjalankan mode POSIX.
Namun, jangan lakukan ini : ini seperti melepas kantung udara mobil Anda untuk meningkatkan efisiensi bahan bakar. Dalam jangka panjang, Anda akan menghabiskan lebih banyak waktu untuk memulihkan daripada menjawab pertanyaan sebelumnya.
sumber
:e
untuk melihat apa yang terjadi (termasuk cepatu
untuk membatalkan kembali ke apa Saya punya di buffer.) Saya suka itu jauh lebih baik daripada menjadi terganggu karena sudah memiliki file terbuka.Ini terjadi pada saya ketika terminal saya tiba-tiba menutup koneksi saya dengan vi terbuka.
Untungnya saya tidak memiliki perubahan yang hilang.
process ID: 2251 (still running)
, dalam hal ini 2251ps 2251
kill 2251
Dan itu saja.
Ingat swap file ada untuk melindungi Anda, dan Anda tidak harus menonaktifkannya sepenuhnya.
sumber
vi(m)
proses?Saya telah memecahkan masalah ini dalam tiga langkah sederhana:
1 :) Jalankan "ls -la" di mana file tersebut ada sehingga Anda dapat melihat file .swp untuk hal yang sama.
2 :) Sekarang "rm -i * .swp" yaitu, hapus file ".swp" dari direktori.
3 :) Sekarang konfirmasikan apakah file ".swp" telah dihapus.
4 :) Sekarang nikmati dari peringatan itu.
sumber
rm -rf
untuk menghapus file? Saya diganti-rf
dengan yang lebih masuk akal-i