2012-02-09 141 views
3

是否有一種簡單的方法可以自動保存我在shell模式緩衝區中執行的每條命令?我從Emacs的shell緩衝區中運行python和lua等東西,除了常規的bash命令之外,還想保存這些東西。在Emacs中自動保存shell歷史記錄

默認行爲將歷史記錄保存在.history或.bash_history中,但不會將輸入保存到子流程。舉個例子,如果我做了以下

 
ls /export/hda3/tmp 
python 
a=2+3 
import sys 
sys.exit() 
ls /export/hda3/tmp 

會保存

 
#1328903075 
ls /export/hda3/tmp 
#1328903081 
python 
#1328903087 
ls /export/hda3/tmp 

回答

2

命令會自動保存,只有你需要確保實際退出shell以下。如果你只是殺死shell緩衝區,那麼不會保存命令。

我添加了一個檢查emacs的退出警告我,如果我有一個開放的外殼緩衝區,這樣我就可以手動退出它:

(defun my-check-if-no-shell-buffer-exists() 
    (if (not (get-buffer "*shell*")) 
     t 
    (message "you have a shell buffer, make sure you exit it manually") 
    nil)) 

(add-hook 'kill-emacs-query-functions 'my-check-if-no-shell-buffer-exists) 

它甚至會更好,如果殼緩衝區會自動做當殺死緩衝區。我認爲這是emacs中的一個錯誤,它無法做到這一點。

編輯:我注意到我有防止在運行過程中的警告時,Emacs的退出,這就是爲什麼我需要上述功能的設定。如果您在退出時已經收到有關正在運行的shell的警告,那麼您不需要它,只需手動退出shell以保存歷史記錄。

+0

你的意思是它們是由Emacs自動保存的? (如果是這樣,在哪裏?)Bash本身不保存命令在我的情況下,因爲我在頂部運行另一個進程(即,Python解釋器) – 2012-02-09 19:59:50

+0

我檢查,它被寫入〜/ .history和一切都在那裏( bash,python命令等)。每一個你打入shell的地方都在那裏。 – Tom 2012-02-09 20:54:55

+0

更正:在之前的評論中,我說bash,儘管我在windows上並且不使用bash,所以我應該說說命令提示符。如果底層shell是bash,它可能也可能不一樣,儘管emacs本身可以保存鍵入的shell命令,所以它不應該有很大的不同。 – Tom 2012-02-10 06:16:40