728 votes

Comment faire du redo (c'est-à-dire "undo undo") dans Vim ?

Dans Vim, j'ai trop défait. Comment défaire (c'est-à-dire refaire) ?

111 votes

Comme j'ai déjà recueilli 2 votes serrés, je pense que cette question a sa place ici car vim est un éditeur pour programmeurs.

30 votes

Je suis d'accord, c'est lié à la programmation et c'est une vraie question.

44 votes

Quelqu'un ici fait le tour et marque chaque question sur Vim comme "appartient à SU" alors que la communauté a décidé depuis longtemps que Vim appartient à SO, étant un outil de programmation.

942voto

John Millikin Points 86775

Ctrl + r

2 votes

Je voudrais juste proposer le plugin undoTree, super génial pour les fois où vous vous êtes apparemment plantés avec une flopée d'annulations et de refontes.

3 votes

Si je lis sur vi, alors mes doigts agissent d'eux-mêmes. Les commandes vi ne fonctionnent pas sur stackoverflow :-)

4 votes

Note aux utilisateurs de Mac : Ctrl + r dans un terminal Mac va ruiner votre journée dans vim. Je ne connais pas la combinaison de touches appropriée dans le terminal Mac pour annuler, mais ce n'est certainement PAS Ctrl + r !

139voto

Peter Points 38320

Consultez également :undolist qui offre plusieurs chemins dans l'historique des annulations. Ceci est utile si vous tapez accidentellement quelque chose après avoir trop annulé.

25 votes

@amindfv : prendre le nombre de :undolist et le type :undo 178 (say) pour revenir à l'étape 178.

1 votes

Existe-t-il un moyen d'indiquer ce qui sera exactement annulé dans le cadre de l'opération :undolist ?

2 votes

@csharpfolk Utilisez le plugin undotree ( github.com/mbbill/undotree )

55voto

ZyX Points 26516

Utilisez :earlier / :later . Pour tout refaire, il suffit de faire

later 9999999d

(en supposant que vous avez édité le fichier pour la première fois il y a au maximum 9999999 jours), ou, si vous vous souvenez de la différence entre l'état d'annulation actuel et l'état nécessaire, utilisez Nh , Nm ou Ns pour les heures, les minutes et les secondes respectivement. + :later N<CR> <=> Ng+ et :later Nf pour les écritures de fichiers.

1 votes

:later a fonctionné pour moi dans vi (pas vim -- j'ai cherché "vi" sur google mais tous les résultats sont pour "vim"), merci !

0 votes

@Luc Presque partout où vous avez vi il s'agit d'un lien symbolique vers un exécutable vim ou une copie de celui-ci. Pas complètement partout cependant.

0 votes

@ZyX J'aimerais que ce soit vrai. Je n'utilise vi qu'après que bash ait jeté un vim: command not found . La prochaine chose que je fais est alias vim=vi parce que je le tape si automatiquement, mais c'est le bon vieux vi néanmoins. De même, redo (ctrl+r) aurait fonctionné correctement si vi avait été un alias de vim.

48voto

geowa4 Points 17712

Documentation sur Vim

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}

32voto

Xinus Points 7693

En mode commande, utilisez la commande U pour annuler et Ctrl + r à refaire. Jetez un coup d'œil à http://www.vim.org/htmldoc/undo.html .

0 votes

Et en mode insertion ?

2 votes

@YuFengShen la puissance de vim est dans le mode commande. nous n'avons pas besoin de redo en mode insertion

0 votes

Le lien est (effectivement) rompu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X