HOWTO · Linux

Come eseguire operazioni di annullamento e ripristino in Vim e Vi

Scopri come annullare e ripristinare le modifiche in Vim e Vi, usare `:undolist` e `:earlier` per navigare nella cronologia degli annullamenti e comprendere il raggruppamento degli annullamenti.

In questa pagina

In Vim, torna alla modalità Normale con Esc, quindi premi u per annullare l’ultima modifica o Ctrl-R per ripristinare una modifica appena annullata. Questi sono tasti della modalità Normale. I comandi Ex come :undo e :redo si inseriscono nella riga di comando di Vim dopo :.

Annullare le modifiche in Vim e Vi

Premi Esc per entrare in modalità Normale, quindi premi u. Per annullare più modifiche, usa un conteggio come 3u oppure premi u ripetutamente. Anche le forme Ex :u e :undo annullano una modifica; digita i due punti come parte del comando.

Ad esempio, parti da Hello World. In modalità Inserimento, aggiungi Beautiful tra le parole, quindi premi Esc; la riga diventa Hello Beautiful World. Premi u in modalità Normale per ripristinare Hello World. I gruppi di annullamento dipendono dalle regole di modifica e dal contesto di Vim, quindi non è garantito che una sequenza di digitazione formi un singolo passaggio di annullamento in ogni situazione.

Il piccolo esempio di shell qui sotto modella gli stessi stati del testo: prima, modificato, annullato e ripristinato. Illustra la sequenza del testo; i tasti di Vim sopra indicati si eseguono nell’editor.

before='Hello World'
edited='Hello Beautiful World'
current=$edited
printf 'Edited: %s\n' "$current"
current=$before
printf 'After u: %s\n' "$current"
current=$edited
printf 'After Ctrl-R: %s\n' "$current"
Edited: Hello Beautiful World
After u: Hello World
After Ctrl-R: Hello Beautiful World

Ripristinare le modifiche in Vim e Vi

Dopo aver annullato, premi Ctrl-R in modalità Normale per ripristinare la modifica. Un conteggio come 3<C-R> ripristina fino a tre modifiche annullate. Puoi anche inserire :redo nella riga di comando. Nell’esempio sopra, Ctrl-R ripristina Hello Beautiful World.

Il ripristino segue la cronologia degli annullamenti corrente. Se annulli e poi fai una nuova modifica, Vim cambia quella cronologia; non aspettarti che Ctrl-R ripristini un ramo di modifiche abbandonato.

Usa :undolist per visualizzare le informazioni sulla sequenza di annullamento. Per passare a uno stato numerato, usa :undo {N}; {N} è un numero di sequenza di annullamento, non un ID di modifica arbitrario. Ad esempio, :undo 3 passa al numero di sequenza 3.

Usa :earlier {N} per tornare indietro di {N} modifiche; ad esempio, :earlier 3 torna indietro di tre modifiche. Il comando della modalità Normale g- passa a stati del testo più vecchi, mentre g+ avanza verso stati più recenti. Questi comandi navigano nella cronologia degli annullamenti di Vim; non selezionano le voci in base ai numeri stampati da :undolist.

Comprendere i blocchi di annullamento e il comando U

La u minuscola annulla una modifica nella cronologia degli annullamenti. La U maiuscola ha un comportamento diverso, incentrato sulla riga: in Vim ripristina la riga corrente al suo stato precedente secondo le regole di annullamento di Vim. Non è un altro modo di scrivere u e non significa «annullare ogni modifica sulla riga» in tutti i contesti di modifica. Il raggruppamento degli annullamenti può variare in base ai comandi usati e al momento in cui Vim registra una modifica.

Le implementazioni di Vi differiscono, quindi consulta la guida dell’editor che stai usando se un comando si comporta in modo diverso. La cronologia degli annullamenti di Vim è normalmente disponibile finché la sessione di modifica rimane aperta. Tra una sessione e l’altra, la persistenza dipende dalla configurazione del file di annullamento di Vim; salvare con :w scrive il buffer, ma da solo non garantisce che la cronologia degli annullamenti persista.

Domande frequenti

Come posso annullare più modifiche? Torna alla modalità Normale e usa un conteggio come 3u, oppure ripeti u.

Qual è il tasto per ripristinare? Premi Ctrl-R in modalità Normale, oppure inserisci :redo nella riga di comando di Vim.

Come posso ispezionare o navigare nella cronologia degli annullamenti? :undolist elenca le informazioni sulla sequenza; :undo {N} punta a un numero di sequenza. :earlier 3 torna indietro di tre modifiche, mentre g- e g+ si spostano tra stati più vecchi e più recenti.

Vim conserva la cronologia degli annullamenti dopo la chiusura? Può farlo quando l’annullamento persistente è configurato e il file di annullamento è disponibile. Senza questa configurazione, non dare per scontato che la cronologia della sessione sopravviva alla chiusura di Vim. :w salva il contenuto del file, non è una promessa di cronologia degli annullamenti persistente.