Best practice per i file di scambio VIM?


14

Ogni volta che esco da una sessione in vim perdendo la mia connessione sono piuttosto pieno di dred (eppure continuo a usare vim ... che masochista devo essere) perché quando riapro i miei file un mucchio di swap- i file sono in attesa di provare a distruggere il mio lavoro. Quali sono le migliori pratiche per lavorare con i file di scambio vim? Hai appena scelto quello più recente? Se il file funziona nel modo previsto, elimini semplicemente i file di scambio? Come sbarazzartene?


5
I file di scambio sono lì per proteggere il tuo lavoro. Prendi in considerazione l'utilizzo dello schermo gnu.

1
Non voglio disattivare la funzionalità; è fastidioso ma come dici utile.
leeand00,

1
Voglio solo sapere come usarlo correttamente.
leeand00,

2
@DrEval Uso tmux
leeand00 il

2
Se usi tmux, non dovresti preoccuparti di perdere la connessione: ricollegati alla sessione quando ti riconnetti. Potresti anche essere interessato a mosh e al plug-in Recover di @ ChristianBrabandt .
Ricco

Risposte:


22

Non fatevi prendere dal panico!

Il recupero dei file è sempre sicuro, perché vim non scrive mai le modifiche finché non le scrivi tu stesso. Quindi il ripristino da un file di scambio e la chiusura senza salvataggio non modificherà nulla.

Organizza i tuoi file di scambio:

Ottieni vim per mettere tutti i tuoi file di scambio nello stesso posto, in modo da sapere sempre dove sono:

set directory^=$HOME/.vim/swap//

o dove preferisci. Utilizzare //alla fine del nome file fa sì che vim usi percorsi di file assoluti per i nomi dei file di scambio in modo da non ottenere collisioni di nomi. Assicurati che la directory esista, o vim non la utilizzerà (non la creerà per te).

Nota: questo funziona solo su variabili d'ambiente, se vuoi usare una variabile vimscript allora dobbiamo usare un po 'di :executemagia:

execute "set directory^=".my_vim_home_var."/swap//"

Diff le differenze:

L'aiuto di Vim suggerisce un comando molto utile per utilizzare in questa situazione: :DiffOrig. Non è un comando vim predefinito , quindi copia l'implementazione dal :h :DiffOrigtuo vimrc. (è anche $VIMRUNTIME/defaults.vimse hai vim8). Ora puoi recuperare il file ed eseguire semplicemente DiffOrig per ottenere un vimdiff di ciò che è cambiato dalla versione non modificata.

Se si desidera confrontare il contenuto di più file di scambio, ripristinare il file con ciascun diverso file di scambio e quindi scrivere il risultato in file temporanei. Ora carica i file ed esegui :diffthissu ciascun file, apporta le modifiche desiderate, riscrivi il file originale ed elimina i file temporanei e di scambio.

Comandi utili:

:swapname: ottieni il nome che vim sta usando per il file di scambio per il buffer corrente ( :h :swapname) :recover: ripristina il file selezionato, come quando avvii vim e premi R( :h :recover)

Dai un'occhiata alla guida:

Vim ha un'intera sezione del manuale utente sul recupero: :usr_11.txt
Guida di riferimento del Vim su file di swap: :h swap-file, h recovery
Aiuto sull'opzione directory (per impostare la posizione del file di swap)::h 'directory'

Modifica: esempio modificato per l'impostazione della directory, come sottolineato nei commenti di @B Layer


E quando finisci con più file di scambio? A causa di molte molte connessioni interrotte?
leeand00,

1
Ne ho parlato nel secondo paragrafo di "Diff the Differencces". Una volta che hai usato diff per determinare quali modifiche vuoi mantenere, elimina tutti i file temporanei e i vecchi file di scambio che hai fatto (ora sai dove sono tutti i file di scambio).
flemingfleming,

1
Cordiali saluti, non è necessario utilizzare exec... set directory^=$HOME/.vim/swap//funziona bene purché $HOMEsia una variabile di ambiente inizializzata. Vedere :h expand-env. Funziona anche con dictionary, undodire backupdirper citarne alcuni.
B Layer,

Grazie per avermelo ricordato! Uso una variabile vimscript nella mia configurazione invece lì, quindi l'esecuzione e le variabili di ambiente dimenticate non ne hanno bisogno. Pensandoci, probabilmente dovrei semplicemente usare vim per impostare una variabile d'ambiente.
flemingfleming

2

Personalmente, ho disattivato i file di scambio e di backup, poiché tende a creare file di scambio e file di backup ovunque e spesso crea conflitti. L'annullamento persistente di Vim è stato molto più affidabile e privo di errori.

Vim attualmente ha un annullamento persistente, è un metodo di backup molto più fine. Ogni volta che si preme Esc, viene acquisito lo stato corrente del file.

Puoi usare :undolistplugin come gundo o undo-tree per sfogliare la cronologia degli annullamenti.

Per usare vim in questo modo:

  • creare una directory in cui verrà acquisita la cronologia delle modifiche per ciascun file
  • di 'a vim di usare quella directory
  • abilita l'annullamento persistente

Nella shell:

mkdir ~/.vim/undodir

In Vim

set undodir=~/.vim/undodir
set undofile

Per disattivare i file di scambio: :set noswapfile


1
Ci sono un paio di problemi piuttosto grandi con questa risposta. 1. L'annullamento persistente risolve un problema diverso nello scambio di file (e 'writebackup'risolve un altro problema). Avere l'annullamento persistente abilitato non aiuta se il computer si arresta in modo anomalo. È possibile sostenere che i file di swap non sono necessari per altri motivi (moderna stabilità del sistema operativo, l'esistenza di UPS), ma non hanno fatto in questa risposta. 2. l'impostazione 'undodir' non abilita l'annullamento persistente! Devi prepararti 'undofile'per questo
Rich
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.