web-dev-qa-db-fra.com

Comment l'arbre d'annulation de VIM est-il utilisé?

Cette réponse dit:

Le système d'annulation/rétablissement de Vim est imbattable. Tapez quelque chose, annulez, tapez quelque chose d'autre, et vous pouvez toujours récupérer la première chose que vous avez tapée car Vim utilise un arbre d'annulation plutôt qu'une pile. Dans presque tous les autres programmes, l'historique de la première chose que vous avez tapée est perdu dans cette circonstance.

C'est la première fois que j'en entends parler. Comment puis-je revenir en arrière le long de l'arbre?

127
Nathan Fellman

Voir également :h undo-redo, qui répertorie toutes les commandes et leur utilisation.

Il existe deux façons de parcourir l'arbre d'annulation. L'une consiste à remonter le temps. g+ et g- traversera tous les nœuds de l'arborescence dans l'ordre chronologique ou chronologique inverse (ce qui peut être un peu déroutant, car il peut sauter arbitrairement entre les branches d'annulation, mais si vous le faites g- assez longtemps, vous arriverez toujours là où vous devez aller éventuellement). :earlier et :later prenez un descripteur de temps comme 7m ou 1h; encore une fois, cela peut vous faire sauter arbitrairement entre les branches d'annulation.

L'autre méthode consiste à accéder à des nœuds spécifiques de l'arborescence à l'aide de :undo nn est le numéro d'une action. (Toutes les actions, c'est-à-dire les ajouts de texte, les suppressions, les remplacements, sont numérotées séquentiellement au fur et à mesure que vous les effectuez.) Vous pouvez rechercher le nombre d'actions sur les feuilles de l'arbre d'annulation via :undolist. Cela vous permettra de sauter facilement entre les branches. Vous pouvez ensuite utiliser u et Ctrl-R pour monter et descendre cette branche.

Il existe de bons exemples dans l'aide de Vim. La meilleure façon de comprendre comment cela fonctionne est de jouer avec un peu.

136
Brian Carper

Je suis un peu en retard à la fête, mais j'ai pensé que je mentionnerais que j'ai écrit un plugin de visualisation d'arbre d'annulation pour Vim: http://bitbucket.org/sjl/gundo.vim/

Personnellement, j'ai trouvé que représenter graphiquement l'arbre comme celui-ci était la seule façon de lui donner un sens.

67
Steve Losh

Cette page explique tout ce que vous devez savoir:

http://vimdoc.sourceforge.net/htmldoc/usr_32.html

16
SolutionYogi

Si vous utilisez vim, vous pouvez naviguer dans l'arborescence d'annulation à l'aide de:

  • u: (annuler) recule dans l'arborescence d'annulation
  • Ctrl+R: (refaire) avancer dans l'arbre d'annulation

Autres moyens de faire avancer ou reculer le document dans le temps:

  • :earlier 15m: reculer de 15 minutes
  • :later 15m: avancer de 15 minutes
15
Wadih M.

Je sais que cette question a été répondue, mais j'ai pensé ajouter un exemple.

Créez un nouveau fichier et saisissez:

this is a line

undol affichera l'arbre d'annulation. À ce stade, vous n'avez rien défait

:undol

number changes  when               saved
     1       1  14:50:36

appuyez maintenant sur ESC et modifiez la ligne pour:

this is a old line

passer en mode normal et appuyer sur u (annuler), cela devrait supprimer "old". Si vous cochez undol, à ce stade, vous n'avez toujours qu'une seule branche.

modifiez maintenant la ligne pour qu'elle dise:

this is a new line

Maintenant :undol spectacles:

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

Vous pouvez passer à la première branche en tapant

:u 2

cela vous amènera à la fin de la branche associée au numéro 2. Vous pouvez vous déplacer le long de cette branche avec g+ et g-. À ce point g+ ne fera rien (vous êtes à la feuille). Si vous appuyez sur g- "Old" sera supprimé (vous parcourez le premier arbre d'annulation). C'est-à-dire si vous supprimez "old" avec g- et appuyez sur g+ encore une fois, "old" sera refait.

Si vous tapez

:u 3

Vous passerez à la feuille de la deuxième branche d'annulation et vous lirez:

this is a new line
8
Alexander

Beaucoup de cela est résumé ici:

http://vim.wikia.com/wiki/Using_undo_branches

6
Ben Fritz

Outre l'utilisation de gundo.vim, j'aime mentionner g+ et g-

3
vbd