web-dev-qa-db-fra.com

Comment "refaire" les modifications après "annuler" avec Emacs?

Cet article dit que "Emacs a redo parce que vous pouvez inverser la direction tout en annulant, annulant ainsi l'annulation".

Qu'est-ce que ça veut dire? Comment un utilisateur peut-il "refaire" avec Emacs?

255
prosseek

Version courte: en annulant l'annulation. Si vous annulez, puis effectuez une commande non-d'édition telle que C-f, la prochaine annulation annulera l'annulation, ce qui entraînera un rétablissement.

Version plus longue:

Vous pouvez penser à annuler comme opérant sur une pile d'opérations. Si vous exécutez une commande (même une commande de navigation telle que C-f) après une séquence d'opérations d'annulation, toutes les annulations sont placées dans la pile d'opérations. Donc, la prochaine annulation annule la dernière commande. Supposons que vous ayez une séquence d'opérations qui ressemble à ceci:

  1. Insérer "foo"
  2. Insérer "barre"
  3. Insérer "J'aime le spam"

Maintenant, vous annulez. Cela annule la dernière action, ce qui donne la liste suivante:

  1. Insérer "foo"
  2. Insérer "barre"

Si vous faites autre chose que d'annuler à ce stade - dites, C-f, la pile d'opérations ressemble à ceci:

  1. Insérer "foo"
  2. Insérer "barre"
  3. Insérer "J'aime le spam"
  4. Annuler insérer "J'aime le spam"

Maintenant, lorsque vous annulez, la première chose qui est annulée est l'annulation. Résultat dans votre pile d'origine (et l'état du document):

  1. Insérer "foo"
  2. Insérer "barre"
  3. Insérer "J'aime le spam"

Si vous exécutez une commande de modification pour interrompre la séquence d'annulation, cette commande est ajoutée après l'annulation. Elle est donc la première chose à être annulée par la suite. Supposons que vous reculiez sur "barre" au lieu de frapper C-f. Ensuite, vous auriez eu

  1. Insérer "foo"
  2. Insérer "barre"
  3. Insérer "J'aime le spam"
  4. Annuler insérer "J'aime le spam"
  5. Supprimer "bar"

Cet ajout/re-ajout se produit à l'infini. Il faut un peu de temps pour s'y habituer, mais cela donne vraiment à Emacs un mécanisme d'annulation/rétablissement très flexible et puissant.

280
Michael Ekstrand

Défaire: C-_

Pour refaire après une annulation: C-gC-_

Tapez plusieurs fois sur C-_ refaire ce qui a été défait par C-_ Pour refaire une commande emacs plusieurs fois, exécutez votre commande puis tapez C-xz puis tapez plusieurs fois sur z touche pour répéter la commande (intéressant lorsque vous voulez exécuter plusieurs fois une macro)

201
Jérôme Radix
  • Pour annuler une fois: C-/
  • Pour annuler deux fois: C-/C-/
  • Pour refaire une fois, immédiatement après avoir annulé: C-gC-/
  • Pour refaire deux fois, immédiatement après avoir annulé: C-gC-/C-/. Notez que C-g n'est pas répété.
  • Pour annuler immédiatement à nouveau , une fois: C-gC-/
  • Pour annuler immédiatement à nouveau deux fois: C-gC-/C-/
  • Pour refaire à nouveau , le même…

Si vous avez appuyé sur une touche (en tapant des caractères ou en déplaçant simplement le curseur) depuis votre dernière commande d'annulation, il n'est pas nécessaire de taper C-g avant votre prochaine opération d'annulation/restauration. C-g est simplement une touche sûre à frapper qui ne fait rien par elle-même, mais qui compte comme une touche non annulée pour signaler la fin de votre séquence d'annulation. Appuyer sur une autre commande telle que C-f fonctionnerait également; c'est juste que cela déplacerait le curseur d'où vous l'aviez.

Si vous appuyez sur C-g ou sur une autre commande sans le vouloir, et que vous annulez maintenant dans la mauvaise direction, appuyez simplement sur C-g pour inverser à nouveau votre direction. Vous devrez annuler tout au long de vos répétitions et annulations accidentelles avant d’obtenir les annulations que vous souhaitez, mais si vous continuez à frapper C-/, vous finirez par atteindre l’état souhaité. En fait, chaque état de la mémoire tampon est accessible, si vous appuyez une fois sur C-g puis que vous appuyez sur C-/ suffisamment de fois.

Les raccourcis alternatifs pour undo, autres que C-/, sont C-_, C-x u et M-xundo.

Voir Annuler dans le manuel d’Emacs pour plus de détails sur le système d'annulation d'Emacs.

48
Rory O'Kane

Pour ceux qui souhaitent utiliser la fonctionnalité d'annulation/rétablissement la plus courante, quelqu'un a écrit undo-tree.el . Il fournit l'aspect et la convivialité d'une annulation non-Emacs, mais donne également accès à tout l'arborescence de l'historique d'annulation.

J'aime le système d'annulation intégré d'Emacs, mais je trouve ce paquet très intuitif.

Voici le commentaire du fichier lui-même:

Emacs a un puissant système d'annulation. Contrairement au système d'annulation/restauration standard dans la plupart des logiciels, il vous permet de récupérer tout état passé d'un tampon (alors que le système d'annulation/restauration standard peut perdre états passés dès que vous refaites). Cependant, ce pouvoir a un prix: beaucoup de gens trouvent le système d'annulation d'Emacs déroutant et difficile à utiliser, générant un certain nombre de paquets qui le remplacent par le système d'annulation/rétablissement moins puissant mais plus intuitif.

La perte de données avec annulation/restauration standard et la confusion de l'annulation d'Emacs proviennent de la tentative de traiter l'historique d'annulation comme une séquence linéaire de modifications. Ce n'est pas. Le `undo-tree-mode 'fourni par ce paquet remplace le système d'annulation d'Emacs par un système qui traite l'historique des annulations comme ce qu'il est: une arborescence de modifications en branches. Cette idée simple permet de combiner le comportement plus intuitif du système undo/redo standard avec le pouvoir de ne jamais perdre d’historique. Un bonus supplémentaire est que l'historique d'annulation peut dans certains cas être stocké plus efficacement, ce qui permet d'accumuler plus de modifications avant qu'Emacs ne commence à supprimer l'historique.

37
Trey Jackson

Méfiez-vous des excuses ndo-tree pour redo !

De nombreux "kits de démarrage" (prélude, purcell, spacemacs) populaires sont fournis avec undo-tree. La plupart (tous?) L'activent même automatiquement. Comme mentionné précédemment, undo-tree est un moyen pratique de visualiser et de parcourir l’arbre undo/redo. Prelude lui donne même un accord-clé (uu), ainsi que C-x u.

Le problème est le suivant: undo-tree semble anéantir la liaison par défaut et bien connue d'Emacs pour redo : C-g C-/.

Au lieu de cela, vous pouvez utiliser ces clés symétriques pour annuler/rétablir :

C-/     undo
C-S-/   redo

Celles-ci sont utiles car parfois vous voulez rapidement refaire sans ouvrir le visualiseur.

17
Micah Elliott

Je trouve redo.el extrêmement pratique pour effectuer l'annulation/la restauration "normale", et je l'associe généralement à C-S-z et l'annule à C-z, comme ceci:

(when (require 'redo nil 'noerror)
    (global-set-key (kbd "C-S-z") 'redo))

(global-set-key (kbd "C-z") 'undo)

Il suffit de télécharger le fichier, de le placer dans votre chemin LISP et de coller ce qui précède dans votre .emacs.

10
monotux

Si vous souhaitez rétablir la dernière opération, procédez comme suit.

  1. ESC
  2. Faites une autre annulation (C + /)
1
dtypist