Bagaimana saya bisa memulihkan file asli dari file .swp?

57

Saya mencoba membuka file .swp menggunakan vidan cattetapi menampilkan sampah.

zarna
sumber
Apakah Anda menggunakan vi atau vim?
frabjous
Apakah ini berhasil emacs? (atau agung, nano, ed, dll.)
frank

Jawaban:

94
vim -r .swp

Ini masuk ke mode pemulihan dan memberi Anda lebih banyak informasi. Saya pikir ini yang Anda inginkan.

.swX-file ditinggalkan jika sesi dengan file yang tidak disimpan terbunuh / crash / sesuatu yang buruk terjadi. Mereka juga hadir selama buffer terbuka yang belum disimpan dalam sesi Vim. vim -rmembaca file sementara ini dan membuat ulang konten. Setelah Anda memulihkannya, simpan saja seperti biasa, mis :w newfilename.

Daniel Andersson
sumber
8
Tepatnya apa yang saya cari. Untuk orang lain, ini adalah cara Anda memulihkan file yang belum disimpan . Metode di atas berfungsi dengan baik jika file sudah ada, tetapi Anda tidak dapat membuka file tanpa nama.
Eric Hu
17

Anda tidak perlu memiliki file asli untuk memulihkan .swp. Cukup buka file seolah-olah ada. vim akan mencari file dengan ekstensi .swp dan menawarkan untuk memulihkannya.

misalnya:

$ ls -a
. .. .test.txt.swp
$ vim test.txt
[...]
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Cukup tekan R untuk memulihkannya dan: wq file

Sunting: Perhatikan bahwa file .swp hanya berisi perubahan yang dilakukan pada file tersebut (lihat komentar). Ini berarti bahwa Anda perlu mengambil salinan file terbaru dari cadangan dan kemudian menggunakan vim untuk memulihkan perubahan terbaru. Jika Anda tidak memiliki salinan cadangan file, Anda benar-benar kurang beruntung.

Veerl Westerlund
sumber
2
Anda pasti harus memiliki file asli, tanpa itu data dalam file .swp tidak berguna. Lihat ": help swap-file". Ada situasi di mana ia tampaknya berfungsi tanpa file asli, tetapi file .swp hanya menyimpan informasi perubahan dan memerlukan beberapa titik awal untuk menerapkan informasi tersebut selama pemulihan.
Heptite
Anda benar, tentu saja. Sebenarnya saya tidak tahu ini tentang vim. Tapi itu hanya logis karena menyimpan salinan lengkap dari file asli akan menjadi pemborosan besar. Maka jawabannya adalah: Pulihkan file Anda dari cadangan, lalu gunakan vim untuk memulihkan modifikasi terbaru.
Vegar Westerlund
Menyimpan seluruh file dalam satu swp akan sia-sia, ya, tapi saya melihat nilai potensial dalam mengumpulkan file swp (ketika diaktifkan.) Untuk alasan yang sama Anda mengedit via diff dan menambal yang asli hanya pada penyimpanan eksplisit, masuk akal bagi saya jika Anda dapat membuat urutan diff, menghasilkan jumlah parsial (tanggal sebelum hari ini -> malam; malam + hari ini = sekarang) dll. Saya menemukan ': pre [serve] `di manuel, saya pikir itu bekerja seperti itu. Dalam hal apa pun, kalimat yang paling penting adalah:The original file is no longer needed for recovery.
John P
Sepertinya itu berfungsi - :preservedan :set cpoptions=...&meninggalkan file .swp dan .swo di direktori dan menawarkan untuk memulihkan dari keduanya. Menggunakan vim -r <file>Anda dapat memilih antara .swp dan .swo. Pengeditan lebih lanjut menghasilkan .swn, .swm, dll., Yang tampaknya merupakan jumlah sebagian swap hingga ke titik itu. Anda dapat kembali ke versi yang Anda sukai dan edit (~ = fork) atau simpan (~ = simpanan). Akhirnya, Anda dapat mengumpulkan file swap, daemonisasi cadangannya, dll. Saya bisa saja salah tentang detail mengenai file yang lebih besar - Saya tidak yakin bagaimana itu mempengaruhi file swap tambahan - lihat di bawah.
John P
(Lanjutan) - buffer membawa flag dan bufferlah yang menghasilkan file swap, jadi meskipun flag tidak diatur dari konfigurasi global atau pengisian otomatis, mereka diwarisi selama pemulihan itu sendiri. Untuk mengganti urutan pemulihan dengan file pemulihan tunggal, Anda dapat memindahkan swap yang ingin .swp dan menyembunyikan sisanya. Saya ingin tahu lebih banyak tentang tumpang tindih antara pemulihan file dan manajemen sesi Vim jika ada yang bisa mengisi kekosongan.
John P
7

Buka file asli menggunakan vim, dan pilih opsi pemulihan.

Ignacio Vazquez-Abrams
sumber
Saya tidak punya file aslinya. Saya hanya punya '
.swp
1
Itu kurang penting daripada yang Anda pikirkan. Buka saja.
Ignacio Vazquez-Abrams
7

1 Buka file swap .file.swpdivim

2 :recoverakan memulihkan file Anda

Sathyam
sumber
7

Setelah membaca komentar Vegar Westerlund dan Heptite, saya ingin tahu pada titik mana vim membutuhkan file asli (atau cadangan) untuk pulih dari file .swp. Inilah yang dilakukan:

Saya membuka file 975 baris, mengeditnya di baris 949 (membuat .swpfile) dan mematikan prosesnya, kemudian menghapus yang asli. $ vim Original_Fileditanya apakah saya ingin memulihkan dari .swp »> yes; hanya 68 baris pertama dan 34 baris terakhir (mulai 8 baris di atas edit saya) yang benar-benar pulih.

Saya kemudian mengulangi pengujian dengan file yang lebih kecil: Dari 20 hingga 200 baris, file .swp berisi 100% dari konten asli . Tetapi pada 300 baris, hanya 68 baris pertama dan 18 baris terakhir (mulai 2 baris di atas edit saya) dimasukkan dalam .swp.

Sebagai kesimpulan itu baik untuk mengetahui bahwa vim selalu menyimpan "header" file dan "bawah" dalam file .swp. Mungkin ada pengaturan untuk mengontrol berapa banyak baris yang seharusnya berisi .swp?

tuk0z
sumber