Comment puis-je refaire (c.-à-d. «Annuler annuler») dans Vim?


697

À Vim, j'en ai trop fait. Comment annuler cela (c'est-à-dire, refaire)?


106
comme j'ai déjà recueilli 2 votes serrés, je pense que cela appartient ici car vim est l'éditeur d'un programmeur.
flybywire

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

41
Quelqu'un ici fait le tour et marque chaque question de Vim comme "appartient à SU" malgré que la communauté ait depuis longtemps décidé que Vim appartient à SO, c'est un outil de programmation.
Brian Carper,

@Brian: Avez-vous un lien vers le document où ce consensus a été atteint?
trop de php

12
meta.stackexchange.com/questions/20251/… mais je me souviens que cela est arrivé l'année dernière quelque temps. Vim / Emacs sont des IDE. De plus, les langages utilisés dans les fichiers de configuration pour les deux sont des langages de script complets de Turing, donc l'acte de configurer Vim est lui-même une programmation pour commencer.
Brian Carper,

Réponses:


907

Ctrl+r


2
Je voudrais juste lancer le plugin undoTree, super génial pour les moments où vous vous êtes apparemment vissé avec une rafale d'annulations et de rétablissements.
Jake Sellers

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

2
Remarque pour les utilisateurs de Mac: Ctrl + r dans un terminal Mac gâchera votre journée dans vim. Je ne connais pas la combinaison de touches appropriée dans le terminal Mac à annuler, mais ce n'est certainement PAS Ctrl + r!
tpartee

@tpartee Je viens d'utiliser Ctrl + r dans vim sous l'application Terminal de macOS - aucun problème ici.
Jase

3
Peut-être que @tpartee signifiait tout gâcher Cmd + r? Cela fait certainement quelque chose de bizarre; mais Ctrl + rça a bien fonctionné pour moi (Mac + tmux + vim)
dwanderson

133

Consultez également :undolist, qui offre plusieurs chemins à travers l'historique d'annulation. Ceci est utile si vous tapez accidentellement quelque chose après avoir trop annulé.


22
@amindfv: prenez le nombre :undolistet tapez :undo 178(disons) pour revenir en arrière à l'étape 178.
Peter

existe-t-il un moyen de montrer exactement ce qui sera annulé :undolist?
csharpfolk

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

54

Utilisez :earlier/ :later. Pour refaire tout ce que vous avez juste à faire

later 9999999d

( en supposant que vous devez d' abord modifié le fichier au plus il y a 9999999 jours), ou, si vous vous rappelez la différence entre l' état actuel et undo un besoin, l' utilisation Nh, Nmou Nspendant des heures, minutes et secondes respectivement. + :later N<CR><=> Ng+et :later Nfpour les écritures de fichiers.


1
:latertravaillé pour moi dans vi(pas vim - recherché "vi" sur google mais tous les résultats sont pour "vim"), merci!
Luc

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

@ZyX Je souhaite que ce soit vrai. Je n'utilise vi qu'après bash lance a vim: command not found. La prochaine chose que je fais est alias vim=viparce que je le tape si automatiquement, mais c'est quand même le vi vieux. De plus, refaire (ctrl + r) aurait fonctionné correctement si vi avait été un alias pour vim.
Luc

2
9999999d remonte à 27395 ans. Je suppose que la fonction d'annulation n'a pas été implémentée dans vi à l'époque. Vous voudrez peut-être vous épargner des efforts de frappe exhaustifs et utiliser un nombre raisonnable. 9999d correspond à environ 27 ans, 999d à 2,7 ans. Je suppose que dans la plupart des cas, cela suffit ...
ChristophK

45

Documentation 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}


14

Appuyez d'abord sur la Esctouche pour quitter le mode édition.

Alors,

Pour annuler , utilisez la utouche autant de fois que vous souhaitez annuler.

Pour refaire , utilisez la touche Ctrl+r


11

Reportez-vous à la partie "annuler" et "rétablir" du document Vim .

: red [o] (Rétablir un changement qui a été annulé) et {count} Ctrl+ r(Rétablir {count} changements qui ont été annulés) sont tous deux corrects.

De plus, le : {count} plus tôt (passer à un état de texte plus ancien {count} fois) pourrait toujours être un substitut pour annuler et refaire.


5

CTRL+r

Le "r" est en minuscule.


9
En fait, cela ne devrait pas avoir d'importance - les consoles traditionnelles n'ont pas de distinction entre ^ret ^R, et Vim suit cela.
éphémère

@ephemient: d'accord. Dans MS-DOS, vous ne pouvez même pas taper un minuscule ^X(où Xpeut être n'importe quelle lettre).
nyuszika7h

Dans Vim, Ctrl-shift-R (ctrl avec R majuscule) est le mode de remplacement.
Paul Stelian

5

Vous utilisez VsVim pour Visual Studio?

Je suis tombé sur ce problème lors de l'expérimentation de VsVim, qui fournit des liaisons pour les commandes Vim dans Visual Studio .

Je sais Ctrlrdans Vim lui-même, mais cette liaison particulière ne fonctionne pas dans VsVim (du moins pas dans ma configuration?).

Ce qui fonctionne cependant, c'est la commande :red. C'est un peu plus compliqué que ce qui précède, mais c'est toujours bien quand vous en avez vraiment besoin.


Voté parce que la question concerne spécifiquement vim, pas Visual Studio.
John Von Neumann

3
@JohnVonNeumann Ceci est lié à Vim, ou du moins aux liaisons Vim, juste dans le contexte de VS. C’est ce qui m’a amené à cette question, après tout. Punir quelqu'un pour avoir ajouté un peu plus d'informations semble un peu dur et inutile, ne pensez-vous pas, même si cela s'étend peut-être légèrement au-delà de la portée du PO?
Kjartan

2

En pratique, le :undolistest difficile à utiliser et Vim :earlieret le :latersuivi temporel des modifications ne sont utilisables que pour les corrections de grain de cours.

Compte tenu de cela, j'ai recours à un plug-in qui combine ces fonctionnalités pour fournir une arborescence visuelle d'annulations navigables, appelée «Gundo».

Évidemment, c'est quelque chose à utiliser uniquement lorsque vous avez besoin d'une correction à grain fin, ou si vous n'êtes pas sûr de l'état exact du document que vous souhaitez retourner. Voir: Gundo. Représentez graphiquement votre arbre d'annulation Vim avec style

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.