web-dev-qa-db-fra.com

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

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

(répéter la dernière commande)

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

ou parfois la relation:

(décrire la dernière fonction)

quelle frappe ai-je simplement émis par erreur, dont j'aimerais ajouter l'effet à mon sac de trucs. description-clé est proche, mais nécessite de savoir ce que j'ai tapé.

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

132
ack

en ce qui concerne 'décrire la dernière fonction':

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

Vous pouvez donc faire un travail trivial describe-last-function ainsi

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

Mettez ce elisp dans .emacs ou équivalent, et vous aurez M-x describe-last-function.

Si vous avez frappé sur quelques touches ou fait quelque chose qui a modifié la dernière commande depuis la chose qui vous intéresse, le command-history la fonction pourrait être intéressante. Vous pouvez l'obtenir par M-x command-history

59
cms

La fonctionnalité de répétition est fournie par le package repeat.el Emacs LISP, qui est inclus dans les distributions Emacs standard. De la documentation de repeat.el:

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 clé C-x z. Pour répéter la commande précédente une fois, tapez C-x z. Pour le répéter une deuxième 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 afficher des informations supplémentaires sur la commande de répétition, tapez C-h F repeat RET depuis Emacs.

166
Emerick Rogul

Répéter la dernière commande

C-xz

Une fois que vous l'avez appuyé, appuyez simplement sur z après cela et il se répétera (sans avoir à appuyer sur C-x encore).

151

Vous pouvez répéter les commandes avec C-xzet appuyez sur z pour continuer à répéter.

Un peu choquant, personne n'a mentionné repeat-complex-command, disponible à partir du raccourci clavier C-xESCESC.

76
ashawley

Également, M-x view-lossage vous montre les cent dernières touches (?) que vous avez saisies. Ainsi, vous pourrez voir où se trouve la commande. C'est ce que j'ai utilisé jusqu'à ce que je découvre en ce moment M-x command-history que je pense utiliser avec C-h w à présent.

23
quodlibetor

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

La commande C-xz (repeat) fournit une autre façon de répéter plusieurs fois une commande Emacs. 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

17
echox

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

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.
9
Murali VP

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))))
4
sabof

Ceci est ancien, mais Google apparaît 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, j'ai donc décidé de mettre mes deux cents pour ceux qui pourraient tomber dessus plus tard comme je l'ai fait. J'utilise Portacle, mais j'ai trouvé ce que je cherchais dans ici donc j'espère qu'il est assez 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-↓ pour parcourir l'histoire. En utilisant M-p et M-n a aussi bien fonctionné, mais je préfère utiliser les flèches car j'utilise pas mal Bash.

0
Doug F