在Emacs中自动保存shell历史记录

时间:2012-02-09 01:55:07

标签: emacs

是否有一种简单的方法可以自动保存我在shell模式缓冲区中执行的每个命令?我正在从Emacs的shell缓冲区运行python和lua之类的东西,除了常规的bash命令之外还要保存它们。

默认行为会将历史记录保存在.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

1 个答案:

答案 0 :(得分:2)

命令会自动保存,只需要确保实际退出shell。如果你只是杀死shell缓冲区,那么就不会保存任何命令。

我在emacs出口添加了一个检查,警告我是否有一个打开的shell缓冲区,以便我可以手动退出:

(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)

如果shell缓冲区在杀死缓冲区时自动执行它会更好。我认为这是emacs中的一个错误,它无法做到这一点。

编辑:我注意到我有一个设置可以防止在emacs退出时运行进程警告,这就是我需要上述功能的原因。如果在退出时已经收到有关正在运行的shell的警告,那么您不需要它,您只需要手动退出shell以保存历史记录。