6

最近开始学习lisp,主要是bin使用clisp和vim。我也想尝试 sbcl,因为它通常被推荐为最好的免费 lisp 编译器之一。不过,有一件事让 sbcl 对我来说更难使用:我无法在 REPL 中获得自动完成功能,而我在 clisp 中确实有。也就是说,当我启动 sbcl 并键入以下内容(例如)时,

* (requi<tab>

文字制表符在哪里<tab>,我没有得到完成列表,而是一个详细的制表符。在 clisp 中,<tab>将完成上一行到* (require.

由于我对 lisp 还很陌生,所以 clisp 中的自动完成功能非常方便,所以如果有人能解释如何在 sbcl 中获取它,那将非常方便。

4

4 回答 4

8

在 SBCL 中获取自动完成 repl 的一种方法是使用 linedit,来自http://common-lisp.net/project/linedit/。第二个是使用 rlwrap,一个 readline 包装器,带有一个合适的完成文件。(我认为公平地说,这些都不像 emacs 那样常用,它当然也提供了一个完整的 REPL 以及许多其他有用的特性。)

于 2011-03-22T08:30:07.333 回答
5

我不知道在 SBCL 中获得自动完成 REPL 的方法,但我发现在 SLIME 中与我的 lisp 环境交互非常方便,此时,您可以使用 Cc Ci 进行自动完成。

于 2011-03-21T15:39:45.943 回答
2

其实完全有可能。是的,您想通过 Emacs 和 Slime 使用 Common Lisp(我更喜欢 SLY)。但这是初学者遇到的另一个问题。

你想只玩 REPL 吗?以下说明允许使用 rlwrap 在 SBCL 中自动完成。

https://www.cliki.net/CMUCL%20Hints

1)安装rlwrap

2)创建shell别名,例如把文本像

alias rs="rlwrap sbcl"

进入您的 ~/.bashrc (或 ~/.profile 或其他)。(或者您可以通过“rlwrap sbcl”继续调用 sbcl rlwrapped)

3) Edi Weitz 创建了一个完成列表文件,现在从他的网站上消失了,所以我链接到 Internet 档案。将此单词表保存到文件“sbcl”中 https://web.archive.org/web/20031207221537/http://weitz.de/files/cmucl_completions

4)您可以尝试按照Cliki上的说明放置文件,这只适用于您登录的用户。我希望它适用于所有用户,所以我将“sbcl”文件放入我的 rlwrap 完成目录,该目录位于 /usr/share/rlwrap/completions/

所以现在我有一个文件 /usr/share/rlwrap/completions/sbcl 包含这些单词。

5)创建​​/调整~/.inputrc文件添加行

TAB: complete

5) 完成,现在在新终端中(或重新加载 .bashrc 后)我可以通过 rlwrap 启动 SBCL,别名为“rs”开始输入(def(或其他)并点击 TAB,并获得自动完成建议。

初学者奖励 - 如果您想在终端中从 REPL 编辑 lisp,例如使用 parinfer 的 vim,请尝试使用 magic-ed,这将允许您从 repl 编辑文件。将 SBCL 配置为使用 ED 是深奥的。这为您解决了这个问题。 https://github.com/sanel/magic-ed 有了tab自动补全和终端编辑lisp的便捷方式,可以在终端开始学习Common Lisp。

于 2020-02-18T12:59:42.610 回答
0

如果你想使用 sbcl、emacs 和 slime,请遵循这个Modern Common Lisp on Linux教程。该教程提到了安装quicklisp,尤其是(ql:quickload "quicklisp-slime-helper")一个 elispscript,它可以让 slime 进行自动完成等等。

于 2015-09-06T10:23:03.443 回答