Y a-t-il une (répétition-dernière-commande) dans Emacs?

143

Souvent, j'ai creusé dans des propos et des documents à la recherche de quelque chose comme ce qui suit pour abandonner pour revenir à la tâche à accomplir:

(répétition-dernière-commande)

faire la dernière commande C- ou M- que je viens d'exécuter (pour être rebondi sur une touche fn)

ou parfois le lié:

(description-dernière-fonction)

quelle frappe ai-je juste émise par erreur, l'effet dont je voudrais ajouter à mon sac d'astuces. describe-key est proche, mais nécessite de savoir ce que j'ai tapé.

Suis-je simplement trop demander à mon fidèle acolyte?

accuser
la source
1
Cx z (repeat)et Cx Mz (repeat-complex-command). Voir aussi (repeat-matching-complex-command).
Hatshepsut

Réponses:

62

en ce qui concerne ' describe-last-function ':

Il y a une variable last-commandqui est définie sur un symbole représentant la dernière chose que vous avez faite. Donc, cet extrait elisp - (describe-function last-command)- devrait afficher la documentation de ce qui s'est produit immédiatement.

Pour que vous puissiez faire un travail trivial describe-last-functioncomme ça

(defun describe-last-function() 
  (interactive) 
  (describe-function last-command))

Mettez cet elisp .emacsou équivalent, et vous aurez une fonction describe-last-Mx .

Si vous avez tapé sur quelques touches ou fait quelque chose qui a modifié la dernière commande depuis la chose qui vous intéresse, la command-historyfonction peut être intéressante. Vous pouvez l'obtenir par l' historique des commandes Mx

cms
la source
168

La fonctionnalité de répétition est fournie par le repeat.elpaquet Emacs Lisp, qui est inclus avec les distributions Emacs standard. À partir de repeat.ella documentation de:

Ce package définit une commande qui répète la commande précédente, quelle qu'elle soit, y compris ses arguments, quels qu'ils soient. Cette commande est connectée à la touche Cx z. Pour répéter une fois la commande précédente, tapez Cx z. Pour le répéter une seconde fois immédiatement après, tapez simplement z. En tapant z encore et encore, vous pouvez répéter la commande encore et encore.

Pour voir des informations supplémentaires sur la commande de répétition, tapez C-h F repeat RETdepuis Emacs.

Emerick Rogul
la source
160

Répéter la dernière commande

C-xz

Une fois que vous avez appuyé dessus, appuyez simplement z après cela et cela se répétera (sans avoir à appuyer à C-xnouveau).

Johannes Schaub - litb
la source
Exactement ce que je m'attendais à ce qu'il fasse.
Vasantha Ganesh K
81

Oui, il existe une commande de répétition . Ça s'appelle repeat:

  • Vous pouvez répéter les commandes avec C-x zet appuyer zpour continuer à répéter.

Un peu choquant personne n'a mentionné repeat-complex-command, disponible à partir de la reliure à clé C-x ESC ESC.

Ashawley
la source
2
similaire à Mx Mp sauf que la commande repeat-complex répète les arguments précédents.
Yoo
5
Aussi activé C-x M-:(mnémonique: comme M-:mais avec l'expression elisp déjà remplie pour vous).
phils
6
Oui, choquant en effet . La réponse acceptée n'est pas la meilleure réponse ici, OMI (mais le PO pense apparemment qu'elle correspond le mieux à sa question). Pour moi, cette réponse est la plus proche de ce que la question écrite demandait (répéter la dernière commande). Et les possibilités offertes par repeat.el(qui subsume C-x z z z...) sont les secondes les plus proches. En réponse à la deuxième question posée, à propos des dernières frappes au clavier, la meilleure réponse est C-h l( view-lossage). Il est peu utile, à mon humble avis, pour une describe-last-commandcommande.
Drew le
Vous pouvez également l'utiliser C-x M-:dans le cadre d'une macro de clavier, ce qui peut être pratique. Les repeat-complex-commandliaisons par défaut sont un peu trop lourdes pour taper encore et encore.
remcycles
24

Affiche également M-x view-lossageles cent dernières frappes (?) Saisies. Ainsi, vous pourrez voir où se trouve la commande. C'est ce que j'ai utilisé jusqu'à ce que je découvre tout de suite avec M-x command-historylequel je pense que je vais utiliser C-h wmaintenant.

quodlibetor
la source
18

Je ne suis pas vraiment sûr, mais peut-être cherchez-vous celui-ci?

La commande C-xz( repeat) fournit un autre moyen de répéter une commande Emacs plusieurs fois. Cette commande répète la commande Emacs précédente, quelle qu'elle soit. La répétition d'une commande utilise les mêmes arguments que ceux utilisés auparavant; il ne lit pas de nouveaux arguments à chaque fois.

Manuel Emacs, 8.11 Répéter une commande

échox
la source
2
et comme l'a noté Johannes Schaub, les pressions ultérieures de tout zseul continueront la répétition.
phils
9

Peut-être que cela aiderait aussi ... De l'aide emacs mot pour mot:

C-x M-ESC runs the command repeat-complex-command
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to <again>, <redo>, C-x M-:, C-x M-ESC.
(repeat-complex-command ARG)

Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
The command is placed in the minibuffer as a Lisp form for editing.
The result is executed, repeating the command as changed.
If the command has been changed or is not the most recent previous command
it is added to the front of the command history.
You can use the minibuffer history commands M-n and M-p
to get different commands to edit and resubmit.
Vice-président de Murali
la source
4

Personnellement, j'ai trouvé l'idée de Sebastian utile. Voici une version de travail

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))
sabof
la source
2
Considérant que isearchet isearch-backwardsont importantes commandes de navigation, et que celui - ci est lié par défaut, on pourrait sans doute trouver une meilleure liaison pour-commande de répétition <kbd> Cr </ kbd>. Sur un Mac, je suggérerais Command (super) -Y, car certaines applications ont déjà une convention d'utilisation de cela comme l'opposé de «annuler».
Brighid McDonnell
0

C'est vieux, mais Google affiche ceci en premier lorsque je cherchais à récupérer la dernière commande que j'ai tapée à l'invite Emacs. Aucune de ces réponses n'a fonctionné pour moi, alors j'ai décidé de mettre mes deux cents pour ceux qui pourraient tomber sur cela plus tard comme je l'ai fait. J'utilise Portacle, mais j'ai trouvé ce que je cherchais ici , j'espère donc qu'il est suffisamment générique pour fonctionner avec différentes configurations. Quoi qu'il en soit, ce qui a fonctionné pour moi, c'est d'utiliser C-↑et C-↓de parcourir l'histoire. Utilisant M-pet M-nfonctionnant aussi bien, mais je préfère utiliser les flèches car j'utilise pas mal Bash.

Doug F
la source