Kalıcı kabuk komut geçmişi


12

shell-commandYeni bir oturumda çalıştırdığımda , son oturumdan gelen komutların geçmişine erişemiyorum. Bunu nasıl alabilirim?


1
Eğer var mı (savehist-mode)etkin?
waymondo

Eğer hakkında konuşuyorsanız M-!, okuduğu / yazdığı geçmiş değişkeni shell-command-history, ile kaplıdır (savehist-mode). İstek, comint-input-ringkabuk arabelleklerinin kalıcı bir geçmişini tutmakla ilgili ise , ben de buna yardımcı olabilirim, ancak soruyu nasıl yorumladığımdan, bu bunu başaracaktır.
waymondo

@waymondo hayır, yapmadım. sorunumu çözer. Kabul edebilmem için lütfen bir cevap verin.
RasmusWL

Yanıtlar:


10

Kısa yanıt (savehist-mode).emac'lerinizde etkinleştirilir . Bu, varsayılan olarak / shell-command-historytarafından kullanılan tüm minibuffer geçmiş halkalarını kaydeder .M-!(shell-command)


Ben varken, komut shell-modeistemlerini istemlerden ve diğer modlardan nasıl yükleyeceğinizi / kaydedeceğimizi de anlatacağım comint-mode.

Not: Bu, bash ve OSX ile kurulumum için, ancak bunun bağırsakları çoğu ortamda çalışmalıdır.

  • Önce bash kabuk geçmişinizi emacs ortamınıza kopyalamanız gerekir. Varsayılan olarak bu "HISTFILE" adlı bir değişkende saklanır. Bunu böyle (exec-path-from-shell)paket ile yapmak :

    (exec-path-from-shell-initialize)
    (exec-path-from-shell-copy-env "HISTFILE")
    
  • O zaman (turn-on-comint-history)uygun mod kancalarınızı aramalısınız , yani

    (defun turn-on-comint-history (history-file)
              (setq comint-input-ring-file-name history-file)
              (comint-read-input-ring 'silent))
    
    (add-hook 'shell-mode-hook
              (lambda ()
                (turn-on-comint-history (getenv "HISTFILE"))))
    
    (add-hook 'inf-ruby-mode-hook
              (lambda ()
                (turn-on-comint-history ".pry_history")))
    

Etkileşimli yakut modları için, .pry_historyproje başına yerel bir dosya kullandığımı görebilirsiniz .

  • Ardından, arabellekleri ve emac'ları öldürürken comint geçmişi dosyalarınızı kaydettiğinizden emin olmanız gerekir:

    (add-hook 'kill-buffer-hook #'comint-write-input-ring)
    (add-hook 'kill-emacs-hook
              (lambda ()
                (--each (buffer-list)
                  (with-current-buffer it (comint-write-input-ring)))))
    

Not dash.elÖzlü (--each)biçimlendirme için kullanıyorum .

Bu, minibuffer kabuk komut geçmişinizin yanı sıra emacs ve diğer terimler arasındaki bash istemi komut geçmişinizi kalıcı hale getirecektir.


2

Eminim savehistbunu yönetebilir, işte benim kurulum:

;; Save sessions history
(setq savehist-save-minibuffer-history 1)
(setq savehist-additional-variables
      '(kill-ring search-ring regexp-search-ring compile-history log-edit-comment-ring)
      savehist-file "~/.emacs.d/savehist")
(savehist-mode t)

0

Sana tavsiye düşünüyorum shell-commandtarihini kaydetmek ve bazı ilgili anahtar bağları yeniden eşleştirmek, örneğin üzere M-n/p, bu tarihe talebinde bulunmak için, hatta kendi yazma shell-commandkullanarak read-from-minibuffersizin gibi eğer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.