Wie führe ich einen vorherigen Befehl in einer Emacs-Shell aus?


9

Wenn ich mich im Terminal befinde und die Aufwärtspfeiltaste drücke, geht es natürlich zum vorherigen Befehl. Wenn ich jedoch die M-xTasten drücke und shelltippe, wird in Emacs eine integrierte Shell angezeigt:

Shell in Emacs

Wenn ich jedoch einen Befehl eingebe und nach oben drücke, geschieht Folgendes:

Wenn ich in Shell Emacs die Aufwärts-Taste drücke

Wie komme ich zum letzten Befehl zurück, den ich eingegeben habe?


Sie können auch mit den Navigationstasten zur Zeile mit dem Befehl gehen, den Sie ausführen und drücken möchten RET. Natürlich C-upist es viel einfacher.
Giordano

Antworten:


19

Die Funktion, die den Eingabeverlauf rückwärts durchläuft und die Eingabe speichert. istcomint-previous-input

Es ist gebunden an C-up, M-p.



4

Sie können helm-eshell-history für die interaktive Auswahl des Verlaufs verwenden und das Original ersetzen 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-Geschichte


3

Meine Lieblingsbefehle zum Durchlaufen des Shell-Befehlsverlaufs sind comint-previous-matching-input-from-inputund comint-next-matching-input-from-input. Wenn die Eingabeaufforderung leer ist, verhalten sie sich genau so comint-previous-inputund comint-next-inputdurchlaufen alle Verlaufselemente. Wenn Sie beispielsweise eingegeben haben rake, durchlaufen sie den Shell-Befehlsverlauf von Befehlen, die mit beginnen rake.

Standardmäßig werden diese gebunden C-c M-rund C-c M-sjeweils, aber ich finde die nicht ideal. Ich binde sie persönlich an M-TABund <M-S-tab>.


1

Eine andere Möglichkeit, wenn Sie Eiszapfen verwenden : Verwenden Sie C-c TAB(Befehl icicle-comint-command), um einen zuvor eingegebenen Befehl mit Abschluss (oder Radfahren) auszuwählen.


Eiszapfen kommen der Konsistenz und dem Unterstützungsniveau des Helms nicht nahe.
RichieHH

0

In Eshell haben sich die Dinge ein wenig geändert. Hier ist meine aktualisierte Arbeitslösung für die Verwendung der Helm-Eshell-Geschichte

   (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)
                 ))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.