2009-07-06 10 views
122

This answer dice: Sistema di undo/redoCome viene utilizzato l'albero di annullamento di VIM?

di Vim è imbattibile. Scrivi qualcosa, annulla, digita qualcos'altro, e puoi ancora recuperare la prima cosa che hai digitato perché Vim usa un albero di annullamento invece di uno stack. In quasi tutti gli altri programmi, la storia della prima cosa che hai digitato è persa in questa circostanza.

Questo è il primo che sento di questo. Come posso tornare indietro lungo l'albero?

+1

utenti Jealous Emacs possono desiderare di sapere su [elim-tree-mode ] (http://www.dr-qubit.org/undo-tree/undo-tree-0.6.3.el). –

risposta

131

Vedi anche :h undo-redo, che elenca tutti i comandi e il loro utilizzo.

Ci sono due modi per attraversare l'albero di annullamento. Uno è di andare "indietro nel tempo". g+ e g- attraverseranno tutti i nodi dell'albero in ordine cronologico o cronologico inverso (che può essere un po 'di confusione, perché può saltare arbitrariamente tra i rami di annullamento, ma se lo si fa abbastanza a lungo si otterrà sempre dove si bisogno di andare alla fine). :earlier e :later prendono un descrittore di tempo come 7m o 1h; ancora una volta questo può saltarti arbitrariamente tra i rami di annullamento.

L'altro modo è passare a nodi specifici nell'albero utilizzando :undo n dove n è un numero di un'azione. (Tutte le azioni, ad esempio aggiunte di testo, eliminazioni, sostituzioni, sono numerate sequenzialmente mentre le esegui). Puoi cercare il numero delle azioni sulle foglie dell'albero di annullamento tramite :undolist. Questo ti permetterà di saltare tra i rami facilmente. È quindi possibile utilizzare u e Ctrl-R per spostarsi su e giù per quel ramo.

Ci sono alcuni buoni esempi nell'aiuto di Vim. Il modo migliore per capire come funziona è giocarci un po '.

+34

È possibile unire rami? (Sto scherzando) –

+31

Un pò di. Cercare: h undojoin – Pod

+15

Vim è così fantastico che implementa anche i modi in cui scherziamo su quanto sia fantastico! – andyortlieb

14

Se stai usando vim, è possibile navigare attraverso l'albero di annullamento utilizzando:

  • u: (undo) tornare nella struttura di undo
  • Ctrl+R: (redo) andare avanti nel undo albero

Altri modi di portare il documento indietro o avanti nel tempo:

  • :earlier 15m: tornare indietro nel tempo di 15 minuti
  • :later 15m: mossa anteriori nel tempo di 15 minuti
+1

Questa risposta spiega solo come spostarsi avanti e indietro su un ramo. Non come spostarsi tra i rami. –

+0

Si sposterà su tutti i rami ordinando tutti i punti per ordine temporale. Vedi la risposta di @BrianCarper. – Holloway

+0

@JonathanHartley, se stai usando 'prima' e' dopo' non si muove tra i rami. Mi aspetterei che la maggior parte delle persone non si preoccupi o non ricordi i vari rami che hanno creato. Ma voglio solo tornare indietro nel tempo. Se vuoi creare rami e nominarli magari 'git' o un sistema di controllo versione è un'opzione migliore. –

66

Sono un po 'in ritardo alla festa, ma ho pensato di ricordare che ho scritto una visualizzazione albero di annullamento plugin per Vim: http://bitbucket.org/sjl/gundo.vim/

Personalmente ho scoperto che la rappresentazione grafica dell'albero come questo era l'unico modo in cui avrei potuto dare un senso.

+5

Sono un po 'più tardi alla festa, ma ho pensato di dire che il tuo plugin mi ha appena salvato il culo! – Dean

3

Oltre a utilizzare gundo.vim mi piace parlare g+ e g-

5

Sono consapevole del fatto questa domanda è stato risposto, ma io ho pensato di aggiungere un esempio.

Creare un nuovo file e digitare:

this is a line 

undol visualizzerà l'albero annullamento. A questo punto non si è annullata nulla

:undol 

number changes when    saved 
    1  1 14:50:36 

ora premere ESC e modificare la riga per:

this is a old line 

passare alla modalità normale e premere u (Annulla), questo dovrebbe rimuovere "vecchio". Se controlli undol, a questo punto hai ancora solo un ramo.

ora modificare la linea così si dice:

this is a new line 

Ora :undol spettacoli:

number changes when    saved 
    2  2 87 seconds ago 
    3  2 3 seconds ago 

È possibile passare al primo ramo digitando

:u 2 

questo si sposterà voi alla fine del ramo associato al numero 2. È possibile spostarsi lungo questo ramo con g+ e g-. A questo punto g+ non farai nulla (sei sulla foglia). Se si preme g- "vecchio" verrà rimosso (si sta attraversando il primo albero di annullamento) .Questo è se si rimuove "vecchio" con g- e premere di nuovo g+, "vecchio" verrà ripristinato.

Se si digita

:u 3 

si salta alla foglia del secondo ramo di annullamento e si leggerà:

this is a new line 
Problemi correlati