Vim: elimina automaticamente il file SWP dopo il ripristino non modifica il file originale


9

Quando il processo Vim viene interrotto bruscamente (ad es. Arresto anomalo del sistema), lascia un file SWP. L'apertura del file originale in Vim in seguito offre l'opzione di recupero. Il più delle volte il file recuperato è uguale al file salvato, perché ho l'abitudine di salvare spesso. Quindi Vim dice:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Bene, ovviamente voglio eliminare il file .swp ora!

Come posso ottenere Vim per eliminare sempre automaticamente il file SWP in questo caso?

Sembra che non ci siano impostazioni predefinite per farlo, quindi sto cercando un evento autocommand appropriato.

Un modo che ho trovato è quello di :e #dopo il messaggio, che fa apparire nuovamente le opzioni di scambio esistenti, quindi posso "Eliminarlo". Ma non dovrei davvero fare quei passi extra ogni volta.


Grazie! Ho scoperto che il tuo :e #trucco è, sebbene non ideale, ma ancora più utile della risposta corrente di seguito. :-)
RayLuo,

Risposte:


5

Nota: non hai detto quale sistema operativo stai utilizzando. Di seguito funziona con una shell Unix ma se si esegue Windows, è possibile scaricare un Cygwin bare-bones o qualche altra shell.

Facevo lo stesso come te, corri :eper riaprire lo stesso file per ottenere l'opzione per eliminare il file di recupero. Dopo un arresto anomalo o un riavvio imprevisto del computer, pulisco tutti i file di recupero Vim rimanenti eseguendo vim -ri file di scambio e lasciando che il ripristino proceda.

Quando i file non sono cambiati

Se i file non sono stati modificati, desidero eliminare immediatamente il file di ripristino. Sarebbe bello se Vim potesse farlo automaticamente, ma sfortunatamente no.

Quando i file sono cambiati

Se i file sono cambiati, eseguo il DiffOrigcomando per confrontare le differenze tra la versione originale e quella recuperata. Se sono soddisfatto delle modifiche dal file di ripristino, esco salvando i file con il :xcomando. In caso contrario, scarto le modifiche recuperate con :q!. Se il file di ripristino non è associato a un file salvato, ad esempio, di .swpsolito utilizzo il :w filenameper salvare il buffer recuperato in un file con un nome file.

Assistente DiffOrig

Ho aggiunto il comando DiffOrig al mio in .vimrcmodo che sia sempre disponibile.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Script di shell

Eseguo il seguente script nella mia shell per trovare tutti i file di scambio nella struttura di directory corrente. Ogni file di scambio viene quindi utilizzato per aprire Vim in "modalità di ripristino" e viene quindi eliminato dopo la chiusura di Vim.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

L' rm -iopzione richiede la conferma ( y) per eliminare il file. Se sei più sicuro e vuoi accelerare il processo, questo può essere omesso.

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.