¿Hay un (repeat-last-command) en Emacs?

143

Con frecuencia, busqué a propósito y documentos buscando algo como lo siguiente solo para renunciar a volver a la tarea en cuestión:

(repetir-último-comando)

haz el último comando C o M que acabo de ejecutar (para que se recupere a una tecla fn)

o a veces lo relacionado:

(describe-última-función)

qué pulsación de tecla acabo de emitir por error, cuyo efecto me gustaría agregar a mi bolsa de trucos. describe-key está cerca, pero requiere saber lo que escribí.

¿Simplemente estoy pidiendo demasiado a mi fiel compañero?

ack
fuente
1
Cx z (repeat)y Cx Mz (repeat-complex-command). Ver también (repeat-matching-complex-command).
Hatshepsut

Respuestas:

62

con respecto a ' describe-last-function ':

Hay una variable last-commandque se establece en un símbolo representativo de lo último que hizo. Así que este fragmento de elisp (describe-function last-command)- debería mostrar la documentación de lo que sucedió de inmediato.

Entonces podrías hacer un trivial trabajando describe-last-functionasí

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

Pon ese elisp .emacso equivalente, y tendrás una función Mx describe-last-last .

Si ha golpeado algunas teclas o ha hecho algo que modificó el último comando desde lo que le interesa, la command-historyfunción podría ser de interés. Puede obtenerlo mediante el historial de comandos de Mx

cms
fuente
168

La funcionalidad de repetición es proporcionada por el repeat.elpaquete Emacs Lisp, que se incluye con las distribuciones estándar de Emacs. De repeat.ella documentación de:

Este paquete define un comando que repite el comando anterior, sea lo que sea, incluidos sus argumentos, sean lo que sean. Este comando está conectado a la tecla Cx z. Para repetir el comando anterior una vez, escriba Cx z. Para repetirlo una segunda vez inmediatamente después, escriba solo z. Al escribir z una y otra vez, puede repetir el comando una y otra vez.

Para ver información adicional sobre el comando de repetición, escriba C-h F repeat RETdesde Emacs.

Emerick Rogul
fuente
160

Repite el último comando

C-xz

Una vez que lo presionó, solo presione z después de eso y se repetirá (sin tener que presionar C-xnuevamente).

Johannes Schaub - litb
fuente
Exactamente lo que esperaba que hiciera.
Vasantha Ganesh K
81

Sí, hay un comando de repetición . Se llama repeat:

  • Puedes repetir comandos con C-x z, y presionar zpara seguir repitiendo.

Un poco impactante que nadie mencionó repeat-complex-command, disponible en la encuadernación de teclas C-x ESC ESC.

Ashawley
fuente
2
similar a Mx Mp excepto que el comando repeat-complex-command repite argumentos anteriores.
Yoo
55
También en C-x M-:(mnemotécnico: como M-:pero con la expresión elisp ya rellenada para usted).
phils
66
Sí, realmente impactante . La respuesta aceptada no es la mejor respuesta aquí, OMI (pero el OP aparentemente siente que corresponde mejor a su pregunta). Para mí, esta respuesta está más cerca de lo que pidió la pregunta escrita (repita el último comando). Y las posibilidades que ofrece repeat.el(que subsume C-x z z z...) son las segundas más cercanas. Cuando se hizo la segunda pregunta, sobre qué pulsaciones de teclas fueron las últimas, la mejor respuesta es C-h l( view-lossage). Hay poco uso, en mi humilde opinión, para un describe-last-commandcomando.
Dibujó el
También puede usarlo C-x M-:como parte de una macro de teclado, que puede ser útil. Los repeat-complex-commandenlaces predeterminados son un poco engorrosos para escribir una y otra vez.
remcycles
24

Además, le M-x view-lossagemuestra las últimas cien (?) Pulsaciones de teclas que ingresó. Entonces, podrás ver dónde está el comando. Es lo que usé hasta que en este momento descubrí M-x command-historycuál creo que usaré C-h wahora.

quodlibetor
fuente
18

No estoy realmente seguro, pero ¿tal vez estás buscando este?

El comando C-xz(repeat ) proporciona otra forma de repetir un comando de Emacs muchas veces. Este comando repite el comando anterior de Emacs, sea lo que sea. La repetición de un comando usa los mismos argumentos que se usaron antes; no lee nuevos argumentos cada vez.

Manual de Emacs, 8.11 Repetir un comando

echox
fuente
2
y, como señaló Johannes Schaub, las presiones posteriores zpor sí solas continuarán la repetición.
phils
9

Puede ser que esto también ayude ... De la ayuda de emacs textualmente:

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.
VP VP Murali
fuente
4

Personalmente encontré útil la idea de Sebastian. Aquí hay una versión funcional

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))
sabof
fuente
2
Teniendo en cuenta que isearchy isearch-backwardson comandos de navegación importantes, y que este último está vinculado a <kbd> Cr </kbd> de forma predeterminada, uno podría encontrar un mejor enlace para el comando de repetición. En una Mac, sugeriría Command (super) -Y, ya que algunas aplicaciones ya tienen una convención de usar eso como lo opuesto a 'deshacer'.
Brighid McDonnell
0

Esto es antiguo, pero Google pops publica esto primero cuando estaba buscando recuperar el último comando que escribí en el indicador de Emacs. Ninguna de estas respuestas funcionó para mí, así que decidí poner mis dos centavos para aquellos que podrían tropezar con esto más adelante como lo hice. Estoy usando Portacle, pero encontré lo que estaba buscando aquí, así que espero que sea lo suficientemente genérico como para trabajar con diferentes configuraciones. De todos modos, lo que funcionó para mí es usar C-↑y C-↓recorrer la historia. Usando M-py M-nfuncionó también, pero prefiero usar las flechas ya que uso Bash bastante.

Doug F
fuente