263 votes

Comment faites-vous "refaire" des changements après "annuler" avec Emacs?

Cet article dit que "Emacs a refaire parce que vous pouvez inverser la direction, tout en défaire, revenant ainsi sur l'annuler".

Qu'est-ce que cela signifie? Comment un utilisateur peut "rétablir" avec Emacs?

288voto

Michael Ekstrand Points 12849

Vous pouvez penser à annuler comme fonctionnant sur une pile d'exploitation. Si vous effectuez une commande (même une de navigation de commande tels que C-f) après une séquence d'opérations d'annulation, toutes les annulations sont poussés sur le fonctionnement de la pile. Donc, la prochaine annuler annule la dernière commande. Supposons que vous disposez d'une opération de séquence qui ressemble à ceci:

  1. Insérer "foo"
  2. Insérez le "bar"
  3. Insérer "j'aime spam"

Maintenant, vous annuler. Il annule la dernière action, résultant dans la liste suivante:

  1. Insérer "foo"
  2. Insérez le "bar"

Si vous faites autre chose que de l'annuler à ce point - dire, C-f, le fonctionnement de la pile ressemble à ceci:

  1. Insérer "foo"
  2. Insérez le "bar"
  3. Insérer "j'aime spam"
  4. Annuler insérer "j'aime spam"

Maintenant, lorsque vous annulez, la première chose qui est annulée à l'est de l'annuler. Ce qui fait que l'origine de la pile (et document de l'état):

  1. Insérer "foo"
  2. Insérez le "bar"
  3. Insérer "j'aime spam"

Si vous faites une modification de commande pour briser l'annulation de la séquence, la commande est ajoutée après la défaire et est donc la première chose à être annulée par la suite. Supposons que vous backspaced sur "barre" au lieu de frapper C-f. Alors que vous auriez eu

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

Cet ajout/re-l'ajout se déroule à l'infini. Il faut un peu s'habituer, mais il donne vraiment Emacs très flexible et puissant mécanisme d'annuler/refaire.

207voto

Jérôme Radix Points 4691

Annuler: C-_

À refaire après une annulation: C-g C-_

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

53voto

Rory O'Kane Points 4866
  • Pour annuler une fois: C-/
  • Pour annuler deux fois: C-/ C-/
    • Pour refaire une fois, immédiatement après l'annulation: C-g C-/
    • Refaire deux fois, immédiatement après l'annulation: C-g C-/ C-/. Notez que C-g n'est pas répété.
    • Pour annuler immédiatement de nouveau, une fois: C-g C-/
    • Pour annuler immédiatement à nouveau, à deux reprises: C-g C-/ C-/
    • Pour refaire de nouveau, la même chose...

Si vous avez appuyé sur toutes les touches (si la frappe de caractères ou tout simplement en déplaçant le curseur) depuis votre dernière commande annuler, il n'est pas nécessaire de taper C-g avant votre prochaine undo/redo. C-g est juste un coffre-fort à clé à frapper qui ne fait rien de sa propre, mais compte comme un non-touche annuler pour signaler la fin de votre annulation de la séquence. En appuyant sur une autre commande comme C-f serait trop de travail; c'est juste qu'il permettrait de déplacer le curseur de l'endroit où vous l'aviez.

Si vous frappez C-g ou une autre commande lorsque vous ne vous en veux pas, et vous êtes maintenant en défaire dans la mauvaise direction, il suffit d'appuyer C-g à inverser votre sens nouveau. Vous devez annuler tout le chemin à travers votre accidentelle de rétablissements et les annulations avant de passer à l'arrière vous voulez, mais si vous continuez à frapper C-/, vous finirez par atteindre l'état que vous voulez. En fait, chaque état de la mémoire tampon a jamais été dans est accessible, si vous frappez C-g une fois, puis appuyez sur C-/ le nombre de fois nécessaire.

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

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

38voto

Trey Jackson Points 49816

Pour ceux qui veulent avoir la plus commune annuler/rétablir la fonctionnalité, quelqu'un a écrit undo-tree.el. Il offre l'aspect et la sensation de non-Emacs annuler, mais donne accès à l'ensemble de "l'arbre" de l'historique d'annulation.

J'aime Emacs' intégré dans le système d'annulation, mais de trouver ce paquet pour être très intuitif.

Voici le commentaire du fichier lui-même:

Emacs dispose d'un puissant système d'annulation. Contrairement à la norme undo/redo système dans la plupart des logiciels, il vous permet de récupérer tout état passé d'un tampon (alors que la norme undo/redo système peut perdre le passé, les états dès que vous refaire). Toutefois, cette puissance vient à un prix: beaucoup de gens trouvent Emacs' annuler système difficile à comprendre et à utiliser, la fraie un certain nombre de paquets qui remplacer avec le moins puissant, mais plus intuitif undo/redo système.

À la fois la perte de données à la norme undo/redo, et la confusion d'Emacs' annuler, à partir de souches d'essayer de les traiter annuler l'histoire comme une succession linéaire de les changements. Il n'est pas. L' `annuler 'de l'arbre en mode" prévue par la présente paquet remplace Emacs' système d'annulation avec un système qui traite de l'historique d'annulation comme ce qu'elle est: une ramification de l'arbre de les changements. Cette idée simple permet à l' comportement plus intuitif de l' standard undo/redo système combiné avec la puissance de ne jamais perdre toute l'histoire. D'un côté ajoutée bonus, c'est que l'historique d'annulation peuvent, dans certains cas être stockées de manière plus efficace, en permettant à plus de changements à s'accumuler avant d'Emacs commence à jeter l'histoire.

11voto

monotux Points 1661

- Je trouver de l' redo.el extrêmement pratique pour faire de la "normale" undo/redo, et j'ai l'habitude de le lier à C-S-z et annuler pour 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, le mettre dans votre lisp-chemin d'accès et le coller dans votre .emacs.

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