¿Cómo ejecutar un comando anterior en un shell de Emacs?

9

Por supuesto, cuando estoy en la Terminal y presiono la tecla de flecha hacia arriba, va al comando anterior. Sin embargo, cuando presiono las M-xteclas y shellescribo, aparece un shell integrado en Emacs:

Shell en Emacs

Sin embargo, si escribo un comando y presiono hacia arriba, esto sucede:

Cuando presiono el botón arriba en Shell Emacs

¿Cómo vuelvo al último comando que escribí?

Luke Shimkus
fuente
También puede subir con las teclas de navegación a la línea con el comando que desea ejecutar y presionar RET. Por supuesto C-upes mucho más fácil.
giordano

Respuestas:

19

La función que retrocede a través del historial de entrada, guardando la entrada. escomint-previous-input

Se ve obligada a C-up, M-p.

caisah
fuente
4

Puede usar helm-eshell-history para la selección interactiva del historial y reemplazar el original C-c C-l:

(require 'helm-eshell)

(add-hook 'eshell-mode-hook
          #'(lambda ()
              (define-key eshell-mode-map (kbd "M-l")  'helm-eshell-history)))

;; for shell-mode
(define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring)

helm-eshell-history

Tu Do
fuente
3

Mis comandos favoritos para recorrer el historial de comandos de shell son comint-previous-matching-input-from-inputy comint-next-matching-input-from-input. Si el mensaje está vacío, se comportarán exactamente igual comint-previous-inputy comint-next-inputrecorrerán todos los elementos del historial. Sin embargo, si ha ingresado rake, por ejemplo, recorrerán su historial de comandos de shell desde los comandos que comienzan con rake.

Por defecto, estos están vinculados a C-c M-ry C-c M-srespectivamente, pero encuentro que no son ideales. Los estoy vinculando personalmente a M-TABy <M-S-tab>.

waymondo
fuente
1

Otra posibilidad, si usa Icicles : Use C-c TAB(comando icicle-comint-command) para elegir un comando ingresado previamente con finalización (o ciclo).

Dibujó
fuente
Los carámbanos no se acercan a la consistencia y al nivel de soporte del timón.
RichieHH
0

Las cosas han cambiado un poco en Eshell, así que aquí está mi solución de trabajo actualizada para usar helm-eshell-history

   (use-package eshell
     :config
     (require 'em-hist)      
     (use-package eshell-git-prompt
       :config
       ;; the powerline prompt is best but I've no idea how to shorten it to the last directory.
       (eshell-git-prompt-use-theme 'powerline)
       (define-advice eshell-git-prompt-powerline-dir (:override () short)
         "Show only last directory."
         (file-name-nondirectory (directory-file-name default-directory))))
     :bind (:map eshell-hist-mode-map
                 ;; ("<down>" . 'next-line)
                 ;; ("<up>" . 'previous-line)
                 ;; ([remap eshell-previous-matching-input-from-input] . helm-eshell-history)
                 ([remap eshell-list-history] . helm-eshell-history)
                 ))
RichieHH
fuente