¿Cómo ejecutas el comando anterior en emacs shell?

47

Estoy en modo terminal en Ubuntu, y estoy ejecutando emacs con 2 buffers abiertos, uno es un archivo ruby ​​y el otro es un shell (abierto escribiendo Mx shell), y cuando cambio al buffer del shell, quiero para ejecutar el mismo comando que ejecuté antes. Normalmente presionaría la flecha hacia arriba en una ventana de terminal, pero en emacs, simplemente coloca el cursor en una línea.

¿Alguien sabe de la pulsación de tecla para ejecutar el comando de shell anterior desde un shell de emacs?

Lidmith
fuente

Respuestas:

63

M-p hace el trabajo

vava
fuente
¡Gracias! Busqué un poco, pero no pude encontrarlo.
Lidmith
24

Además de M-p, también puede usar C-up, que me parece preferible. Las teclas complementarias M-no le C-downdarán el siguiente comando en la historia.

Prakash K
fuente
1
Ah, ty. Eso parece más natural.
Lidmith
1
Aunque no se incluyó en la pregunta inicial, debo admitir que [C-up] y [C-down] no funcionan en Emacs a través de la terminal (PuTTY).
avp
1
Tampoco parece funcionar en mi Mac; C-up se asigna a una función específica de Mac.
amo
Para mí también C-upestá asignado a expose. Y se M-psiente más natural para mí.
Indradhanush Gupta
5

También puede agregar esto a su archivo de inicio de emacs:

(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input)
thiagowfx
fuente
2

La solución thiagowfx es preferible para mí, ya que generalmente trato de evitar la dependencia del contexto. Sin embargo, para que funcione, primero tuve que agregar el modo de carga de comint:

(progn(require 'comint)
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))
DeLorean88
fuente
0

La respuesta de DeLorean88 funcionó para mí, pero solo con un segundo corchete de cierre en la línea "progn":

(progn(require 'comint))
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))
Kevin Bartlett
fuente
Revise su archivo nuevamente. La segunda clave de definición debería causar un error de sintaxis ya que el último paréntesis de cierre no coincide con el primero.
vfclists