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 vimper funzionare senza di essa.
Ogni file con cui modifichi vimavrà un file di scambio corrispondente durante la modifica , che vimutilizza per tenere traccia delle modifiche. Quando si termina la modifica di un file, vimverrà 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 vimprogramma 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 vimsessione 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 .swpchiusa 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 vimsessione 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 qtasto per (Q)uitquesta sessione aggiuntiva e torno alla modifica tramite la vimsessione originale .
A volte, se non sono del tutto sicuro, (Q)uitcorro e poi corro jobsper verificare se sto correndo vimesattamente nello stesso terminale; se non succede nulla, corro ps -ef | grep vimper verificare se sto correndo vimaltrove (cioè in un'altra finestra o scheda del terminale). Il punto è che cerco sempre di riprendere la modifica tramite la vimsessione originale .
Se io sono certo che non posso tornare alla sessione di modifica originale, e sto ancora presentato con le seguenti opzioni, quindi premo ra (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 vimcon l' -ropzione, 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 ENTERper 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 vimsessione:
:q!
Quindi, confronta i due file:
diff notes notes2
Se diffnon 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 diffrestituisce 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.