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.