eshell里面打开的程序,例如python的repl,如何记录repl的history?

如题,我发现eshell打开的各种程序都不会记录这个程序本身执行的history,例如标题说的各种repl,在repl里M-n M-p是显示Not found的,就算是有也是进入这个程序之前的shell的命令。

我在网上看了多资料,无一例外都是说的eshell本身的history,而不是我上面说的。这个问题能解决吗?

eshell 不行吧。这个问题其实只要 eshell 能给 repl 里发送上下键就能解决了,然而看起来并不能。jwiegly 在写一个 eshell-term,不过我看代码还没写完。

emacs 里用 repl 还是用 comint 吧。

你这是在套娃。

按理说 eshell 不该管 python repl 的历史记录。

要就实现 python repl 的历史记录,不管它从哪里打开。

@twlz0ne @ksqsf

不懂就问,那zsh是如何做到的,难道它对这些程序都维护了一个历史表单吗

zsh 难道可以吗?长什么样?数据保存在哪里? :astonished:

它为什么要管别人家里的历史啊?

eshell 只能用来简单运行一些不需要复杂 tty 操作的程序,像 REPL 甚至 nvim,htop 这种程序就跑不了了。

Python 的 REPL 是 readline 实现的,当 term 收到一个 C-p 这种信号,readline 就会在自己存的历史记录里面翻一条给你,bash 和 zsh 能用是因为通常我们是在完全功能的终端模拟器里面运行,而非 eshell 这种特殊环境

lldb ----分割---- python

我也不知道是怎么实现的。

@cireu 那eshell能实现类似的功能吗?

HOME 里面有个 .python_history 吧,应该是 python 自己管自己的。

1 个赞

确实,我电脑上有这个文件,还有个 .node_repl_history。应该就是楼主要的答案了。

确实是有这个东西,感谢各位。