Questo messaggio è in realtà piuttosto importante se ti interessa non perdere testo che potenzialmente non hai salvato. Dovrebbe non essere considerato fastidioso, e dovrebbe non causare di cancellare in fretta il file di swap o configurare vim
per funzionare senza di essa.
Ogni file con cui modifichi vim
avrà un file di scambio corrispondente durante la modifica , che vim
utilizza per tenere traccia delle modifiche. Quando si termina la modifica di un file, vim
verrà automaticamente eliminato il file di scambio corrispondente. Pertanto, l'esistenza di un file di scambio e il tentativo di scrivere sopra il file originale dovrebbero essere motivo di considerazione e azione appropriata.
I due scenari presentati nel messaggio ( E325: ATTENTION Found a swap file
) sono in realtà abbastanza comuni: (1) un altro vim
programma sta modificando lo stesso file che si sta tentando di modificare (potrebbe effettivamente essere un'altra persona - nel qual caso non avrebbe davvero senso per eliminare semplicemente alla cieca il file di scambio - o potresti essere tu in un'altra finestra o scheda di un terminale) o (2) una vim
sessione precedente si è arrestata in modo anomalo (molto spesso ciò accade quando si modifica in remoto e la sessione di rete è interrotta) in cui nel caso in cui la sessione vim non sia stata .swp
chiusa normalmente e il file rimanga indietro; un altro esempio di questo secondo scenario è che hai accidentalmente chiuso la finestra del terminale o la scheda che aveva una vim
sessione attiva o in background ).
Quando trovo questo messaggio, penso innanzitutto se sto modificando questo file in un'altra finestra o scheda di un terminale, poiché normalmente opero con più finestre di terminale con più schede ciascuna:
Se mi rendo conto che sto modificando in un altro posto e posso tornare ad esso , quindi premo il q
tasto per (Q)uit
questa sessione aggiuntiva e torno alla modifica tramite la vim
sessione originale .
A volte, se non sono del tutto sicuro, (Q)uit
corro e poi corro jobs
per verificare se sto correndo vim
esattamente nello stesso terminale; se non succede nulla, corro ps -ef | grep vim
per verificare se sto correndo vim
altrove (cioè in un'altra finestra o scheda del terminale). Il punto è che cerco sempre di riprendere la modifica tramite la vim
sessione originale .
Se io sono certo che non posso tornare alla sessione di modifica originale, e sto ancora presentato con le seguenti opzioni, quindi premo r
a (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Premendo r
, vedrai un messaggio come questo:
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
Se, d'altra parte, non mi trovo più di fronte a quelle opzioni, perché sono al prompt della shell, allora corro vim
con l' -r
opzione, come segue:
vim -r notes
Il messaggio risultante sarà simile:
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
In entrambi i casi, premi ENTER
per continuare e vedrai il tuo file.
Nota: se Vim ha dei dubbi su ciò che ha trovato, emetterà un messaggio di errore e inserirà le righe con "???" nel testo. Se durante il ripristino viene visualizzato un messaggio di errore, cercare "???" nel file per vedere cosa c'è che non va. Potresti voler tagliare e incollare per ottenere il testo che ti serve.
L'osservazione più comune è "??? LINES MISSING". Ciò significa che Vim non può leggere il testo dal file originale. Ciò può accadere se il sistema si è arrestato in modo anomalo e parti del file originale non sono state salvate.
Detto questo, non ho mai visto quei ???
segni, quindi questo deve essere un evento davvero raro .
Quindi, salva (cioè scrivi) il contenuto in un altro file (di solito aggiungo "2" alla fine del nome del file originale):
:w notes2
Quindi, uscire forzatamente da questa vim
sessione:
:q!
Quindi, confronta i due file:
diff notes notes2
Se diff
non restituisce nulla , ciò significa che non vi è alcuna differenza ed è sicuro rimuovere sia il file di scambio che il secondo file:
rm .notes.swp notes2
A questo punto, apri il file originale e procedi come se non ci fosse mai stato un problema:
vim notes
Se diff
restituisce qualcosa , significa che il file originale (tramite il file di scambio) ha subito delle modifiche che, grazie al recupero, sono state salvate nel secondo file.
Poiché tali modifiche vengono acquisite nel secondo file, è possibile eliminare il file di scambio in modo sicuro e sovrascrivere il file originale con il secondo:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
A questo punto, apri il file originale e procedi come se non ci fosse mai stato un problema:
vim notes
Sembra un sacco di lavoro, ma una volta che ti abitui al flusso di lavoro ci vogliono circa 20 secondi al massimo.