计划在 guile 中获取最后一个命令

sam*_*249 2 lisp scheme guile

通常在终端(或我以前使用过的任何其他命令提示符)中,我会按向上键来获取最后输入的命令。然而,当在guile解释器中这样做时,我只是得到:

scheme@(guile-user) [1]> ^[[A
Run Code Online (Sandbox Code Playgroud)

获取 guile 中最后输入的命令的最简单方法是什么?

ex *_*ilo 7

命令行 REPL 通常功能匮乏。对于 Guile 来说,可以通过例如在 emacs 中的Geiser下运行来获得更好的体验。这允许在 emacs 缓冲区中运行 REPL,并具有更好的控制。作为长期解决方案,我建议学习如何做这样的事情。

要在 emacs 中提高工作效率,需要一定的学习曲线(不过,不像人们通常担心的那样)。幸运的是,Guile 为那些希望坚持使用常规 Guile REPL 的人提供了一个解决方案。

虽然默认情况下未启用它,但Guile 可以使用 GNU Readline 库。这允许通过向上和向下箭头键导航 REPL 表达式历史记录。假设您已经安装了 GNU Readline 库,您可以从 REPL 启用此功能:

scheme@(guile-user)> (use-modules (ice-9 readline))
scheme@(guile-user)> (activate-readline)
Run Code Online (Sandbox Code Playgroud)

当 Guile 以交互模式启动时,它首先.guile从用户主目录加载init 文件。您可以通过将以上两行添加到文件中来利用这一点(如果文件尚不存在,则为此目的.guile创建一个新文件):.guile

;;; Guile Scheme Init File

;; Activate Readline
;; allows navigation of expression history in REPL
(use-modules (ice-9 readline))
(activate-readline)
Run Code Online (Sandbox Code Playgroud)

更新.guile文件后,每当 Guile 以交互模式运行时,您将自动拥有 Readline 功能。