Come posso recuperare il file originale da un file .swp?


57

Ho provato ad aprire il file .swp usando vie catma visualizza junk.


Stai usando vi o vim?
frabjous,

Funziona con emacs? (o sublime, nano, ndr, ecc.)
franco

Risposte:


94
vim -r .swp

Questo entra in modalità di recupero e ti dà maggiori informazioni. Penso che questo sia quello che vuoi.

.swX-file vengono lasciati indietro se una sessione con un file non salvato viene uccisa / si arresta in modo anomalo / succede qualcosa di brutto. Sono presenti anche durante l'apertura di un buffer non salvato in una sessione Vim. vim -rlegge questi file temporanei e ricrea il contenuto. Dopo averlo recuperato, salvalo come al solito, ad es :w newfilename.


8
Proprio quello che stavo cercando. Per chiunque, ecco come recuperare file non ancora salvati . I metodi sopra funzionano bene se esiste già un file, ma non puoi aprire un file senza nome.
Eric Hu,

17

Non è necessario disporre del file originale per ripristinare .swp. Basta aprire il file come se esistesse. vim cercherà il file con estensione .swp e offrirà di recuperarlo.

per esempio:

$ 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:

Premi R per recuperarlo e: wq il file

Modifica: si noti che il file .swp contiene solo le modifiche apportate al file (vedere commento). Ciò significa che dovrai recuperare una copia recente del file dal backup e quindi utilizzare vim per ripristinare le ultime modifiche. Se non hai una copia di backup del file, sei davvero sfortunato.


2
Devi assolutamente avere il file originale, senza di esso i dati nel file .swp sono inutili. Vedi ": help swap-file". Esistono situazioni in cui può sembrare che funzioni senza il file originale, ma il file .swp memorizza solo le informazioni di modifica e richiede un punto di partenza per applicare tali informazioni durante il ripristino.
Heptite,

Hai ragione, ovviamente. In realtà non lo sapevo su Vim. Ma è logico in quanto archiviare una copia completa del file originale sarebbe uno spreco enorme. Quindi la risposta è: recuperare il file dal backup, quindi utilizzare vim per ripristinare le ultime modifiche.
Vegar Westerlund,

Memorizzare l'intero file in un singolo swp sarebbe dispendioso, sì, ma vedo potenziale valore nell'accumulare file swp (quando abilitato.) Per lo stesso motivo per cui modifichi tramite diff e patch l'originale solo su un salvataggio esplicito, ha senso per me se potessi mettere in scena una sequenza di differenze, generare una somma parziale (date prima di oggi -> notte; notte + oggi = corrente) ecc. Ho trovato ': pre [serve] `nel manuel, penso che funzioni in questo modo. In ogni caso, la linea più importante è:The original file is no longer needed for recovery.
John P

Sembra che funzioni - :preservee :set cpoptions=...&lascia un file .swp e .swo nella directory e offre il ripristino da entrambi. Usando vim -r <file>puoi scegliere tra .swp e .swo. Ulteriori modifiche generano .swn, .swm, ecc., Che sembrano essere la somma parziale degli swap fino a quel punto. Puoi tornare alla versione che preferisci e modificare (~ = fork) o salvare (~ = stash). Alla fine puoi caricare i file di scambio, demonizzare i loro backup, ecc. Potrei sbagliarmi sui dettagli quando si tratta di file più grandi - non sono sicuro di come ciò influisca sui file di scambio extra - vedi sotto.
John P

(Continua): il buffer porta i flag ed è il buffer che produce i file di scambio, quindi anche se i flag non sono impostati dalla configurazione globale o dal caricamento automatico, vengono ereditati durante il ripristino stesso. Per sostituire una sequenza di recupero con un singolo file di recupero, è possibile spostare lo swap che si desidera .swp e nascondere il resto. Mi piacerebbe sapere di più sulla sovrapposizione tra il recupero dei file e la gestione delle sessioni Vim se qualcuno può colmare le lacune.
John P


7

1 Aprire il file di scambio .file.swpinvim

2 :recoverrecupererà il tuo file


7

Dopo aver letto i commenti di Vegar Westerlund e Heptite, volevo sapere a che punto vim necessita del file originale (o di un backup) per recuperare da un file .swp. Ecco cosa ha fatto:

Ho aperto un file di 975 righe, l'ho modificato sulla riga 949 (creazione di un .swpfile) e ho terminato il processo, quindi ho eliminato l'originale. $ vim Original_Filechiesto se volevo recuperare da .swp »> sì; solo le prime 68 righe e le ultime 34 righe (iniziando 8 righe sopra la mia modifica) sono state effettivamente recuperate.

Ho quindi ripetuto il test con file più piccoli: da 20 a 200 righe, il file .swp conteneva il 100% del contenuto originale . Ma a 300 righe, solo le prime 68 e le 18 ultime righe (iniziando 2 righe sopra la mia modifica) sono state incluse in .swp.

In conclusione, è bene sapere che vim salva sempre "header" e "bottom" del file nei file .swp. Forse c'è un'impostazione per controllare quante righe dovrebbe contenere un file .swp?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.