Làm thế nào để chạy một lệnh trước trong trình bao Emacs?


9

Tất nhiên khi tôi ở Terminal và tôi nhấn phím mũi tên lên, nó sẽ chuyển sang lệnh trước đó. Tuy nhiên, khi tôi nhấn M-xphím và gõ shellmột lớp vỏ tích hợp xuất hiện trong Emacs:

Vỏ trong Emacs

Tuy nhiên, nếu tôi gõ một lệnh và nhấn lên, điều này xảy ra:

Khi tôi nhấn nút lên trong Shell Emacs

Làm cách nào để quay lại lệnh cuối cùng tôi đã nhập?


Bạn cũng có thể đi lên bằng các phím điều hướng đến dòng bằng lệnh bạn muốn thực thi và nhấn RET. Tất nhiên C-uplà dễ dàng hơn nhiều.
giordano

Câu trả lời:


19

Chức năng quay vòng qua lịch sử đầu vào, lưu đầu vào. comint-previous-input

Nó chắc chắn sẽ C-up, M-p.



4

Bạn có thể sử dụng helm-eshell-history để chọn lịch sử tương tác và thay thế bản gốc 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-lịch sử


3

Các lệnh yêu thích của tôi để đi xe đạp qua lịch sử lệnh shell là comint-previous-matching-input-from-inputcomint-next-matching-input-from-input. Nếu lời nhắc trống, họ sẽ hành xử chính xác comint-previous-inputcomint-next-inputđạp xe qua tất cả các mục lịch sử. Mặc dù nếu bạn đã nhập rake, chẳng hạn, chúng sẽ chuyển qua lịch sử lệnh shell của bạn bắt đầu bằng rake.

Theo mặc định, những thứ này bị ràng buộc C-c M-rC-c M-stương ứng, nhưng tôi thấy chúng không lý tưởng. Cá nhân tôi ràng buộc họ M-TAB<M-S-tab>.


1

Một khả năng khác, nếu bạn sử dụng Icicles : Use C-c TAB(lệnh icicle-comint-command) để chọn một lệnh đã nhập trước đó với sự hoàn thành (hoặc đi xe đạp).


Icicles không đến gần với sự nhất quán và mức độ hỗ trợ của helm.
RichieHH

0

Mọi thứ đã thay đổi trong Eshell một chút vì vậy đây là giải pháp làm việc được cập nhật của tôi để sử dụng 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)
                 ))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.