Cet article dit que "Emacs a recommencé parce que vous pouvez inverser la direction pendant l'annulation, annulant ainsi l'annulation".
Qu'est-ce que ça veut dire? Comment un utilisateur peut-il «refaire» avec Emacs?
Cet article dit que "Emacs a recommencé parce que vous pouvez inverser la direction pendant l'annulation, annulant ainsi l'annulation".
Qu'est-ce que ça veut dire? Comment un utilisateur peut-il «refaire» avec Emacs?
Réponses:
Version courte: en annulant l'annulation. Si vous annulez, puis effectuez une commande de non-édition telle que C-f, l'annulation suivante annulera l'annulation, ce qui entraînera une répétition.
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 poussées vers la pile d'opérations. Ainsi, la prochaine annulation annule la dernière commande. Supposons que vous ayez une séquence d'opérations qui ressemble à ceci:
Maintenant, vous annulez. Il annule la dernière action, ce qui donne la liste suivante:
Si vous faites autre chose que l'annulation à ce stade - disons C-f, la pile d'opérations ressemble à ceci:
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):
Si vous effectuez une commande de modification pour interrompre la séquence d'annulation, cette commande est ajoutée après l'annulation et est donc la première chose à annuler ensuite. Supposons que vous ayez reculé sur "bar" au lieu de frapper C-f. Vous auriez alors eu
Cet ajout / rajout 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.
Défaire: C-_
Pour refaire après une annulation: C-g C-_
Tapez plusieurs fois C-_ pour refaire ce qui a été annulé par C-_ Pour refaire une commande emacs plusieurs fois, exécutez votre commande puis tapez C-xzpuis tapez plusieurs fois sur la ztouche pour répéter la commande (intéressant lorsque vous voulez exécuter plusieurs fois une macro)
C-u
, par exemple C-u 8 *
(insère huit * où se trouve le curseur). Vous pouvez donc utiliser C-u x C-_
pour annuler x étapes.
C-x e
), vous pouvez simplement appuyer e
aussi souvent que nécessaire pour l'exécuter à nouveau.
C-/
et C-x u
sont des raccourcis clavier alternatifs, équivalents à C-_
. Je préfère C-/
car c'est plus facile à toucher.
C-g C-_
"refaire après une annulation", cela ne s'applique que la première fois que vous appuyez sur la combinaison. Après cela, répétez votre touche d'annulation sans C-g
. Donc, pour refaire trois fois juste après l'annulation, tapez C-g C-_ C-_ C-_
. Si vous tapez C-g C-_ C-g C-_ C-g C-_
, vous allez simplement tourner en rond, défaire votre rétablissement de votre défaite ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Notez que cela C-g
n'est pas répété.C-g
C-/
C-g
C-/
C-/
Si vous avez appuyé sur une touche (que ce soit 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 annulation / restauration. C-g
est juste une touche sûre à frapper qui ne fait rien par elle-même, mais compte comme une touche non annulée pour signaler la fin de votre séquence d'annulation. Appuyez sur une autre commande telle que celle C-f
qui fonctionnerait aussi; c'est juste que cela déplacerait le curseur de l'endroit où vous l'aviez.
Si vous frappez C-g
ou une autre commande alors que vous ne le vouliez pas, 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 annulations et annulations accidentelles avant d'arriver aux annulations que vous voulez, mais si vous continuez à frapper C-/
, vous finirez par atteindre l'état que vous voulez. En fait, chaque état dans lequel le tampon a jamais été accessible est accessible si vous appuyez C-g
une fois, puis appuyez C-/
suffisamment de fois.
Raccourcis alternatifs pour undo
, autres que C-/
sont C-_
, C-x u
et M-x
undo
.
Voir Annuler dans le manuel Emacs pour plus de détails sur le système d'annulation d'Emacs.
Pour ceux qui souhaitent avoir la fonctionnalité d'annulation / rétablissement la plus courante, quelqu'un a écrit undo-tree.el
. Il offre l'aspect et la convivialité de l'annulation non Emacs, mais donne accès à l'ensemble de l'arborescence de l'histoire de l'annulation.
J'aime le système d'annulation intégré d'Emacs, mais je trouve ce package très intuitif.
Voici le commentaire du fichier lui-même:
Emacs dispose d'un puissant système d'annulation. Contrairement au système d'annulation / de restauration standard de la plupart des logiciels, il vous permet de récupérer tout état antérieur d'un tampon (alors que le système d'annulation / de restauration standard peut perdre des états passés dès que vous le refaitez). Cependant, cette puissance a un prix: beaucoup de gens trouvent le système d'annulation d'Emacs déroutant et difficile à utiliser, engendrant un certain nombre de packages qui le remplacent par le système d'annulation / restauration moins puissant mais plus intuitif.
La perte de données avec l'annulation / la restauration standard et la confusion de l'annulation d'Emacs découlent de la tentative de traiter l'historique de l'annulation comme une séquence linéaire de changements. Ce n'est pas. Le «mode d'annulation d'arbre» fourni par ce paquet remplace le système d'annulation d'Emacs par un système qui traite l'historique d'annulation comme ce qu'il est: un arbre de branchement des changements. Cette idée simple permet de combiner le comportement plus intuitif du système d'annulation / rétablissement standard avec le pouvoir de ne jamais perdre d'historique. Un autre avantage supplémentaire est que l'historique d'annulation peut dans certains cas être stocké plus efficacement, permettant à plus de modifications de s'accumuler avant qu'Emacs ne commence à supprimer l'historique.
Méfiez-vous de la bizarrerie d'un arbre à restaurer !
De nombreux «kits de démarrage» populaires (prélude, purcell, spacemacs) sont livrés avec un arbre d'annulation. La plupart (tous?) L'activent même automatiquement. Comme mentionné, l'annulation de l'arbre est un moyen pratique de visualiser et de parcourir l'arbre d'annulation / de rétablissement. Prelude lui donne même un accord de touche ( uu
), et aussi C-x u
.
Le problème est: undo-arbre semble épave par défaut Emacs et bien connu pour la liaison redo :C-g C-/
.
Au lieu de cela, vous pouvez utiliser ces touches symétriques pour annuler / rétablir :
C-/ undo
C-S-/ redo
Celles-ci sont utiles car vous voulez parfois refaire rapidement sans ouvrir le visualiseur.
Je trouve redo.el
extrêmement pratique pour faire des annulations / rétablissements "normaux", et je les lie généralement à CSz et annuler à Cz, comme ceci:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Téléchargez simplement le fichier, placez-le dans votre lisp-path et collez ce qui précède dans votre .emacs
.
Emacs 28 ajoute une commande de rétablissement (appelée undo-redo
).
Si vous souhaitez effectuer des annulations / rétablissements plus typiques, les commandes suivantes peuvent être utilisées.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Par défaut, refaire dans Emacs nécessite d'appuyer sur Cg, puis d'annuler.
Cependant, il est possible d'utiliser l'annulation intégrée d'Emacs pour implémenter une commande de rétablissement également.
Le package undo-fu , utilise la fonctionnalité d'annulation intégrée d'Emacs pour exposer à la fois l'annulation et la restauration.