我最近开始学习lisp,主要使用clisp和vim。我也想尝试sbcl,因为这通常被推荐为最好的免费lisp编译器之一。但有一件事让sbcl对我来说更难用:我无法在REPL中获得自动完成功能,我在clisp中也有。也就是说,当我启动sbcl并键入以下内容(作为示例)时,
* (requi<tab>
其中<tab>
是文字制表符,我没有得到完成列表,而是一个冗长的制表符。在clisp中,<tab>
将完成前一行* (require
。
由于我是lisp的新手,clisp中的自动完成功能非常方便,所以如果有人能解释如何在sbcl中获取它,那将非常方便。
答案 0 :(得分:6)
在SBCL中获取自动完成repl的一种方法是使用http://common-lisp.net/project/linedit/中的linedit。第二种是使用rlwrap,一个readline包装器,以及一个合适的完成文件。 (我认为可以说这些都不像emacs那样常用,当然这也提供了一个完整的REPL以及许多其他有用的功能。)
答案 1 :(得分:4)
我不知道在SBCL中获取自动完成REPL的方法,但我发现在SLIME中与我的lisp环境接口非常方便,此时,您可以使用Cc Ci进行自动完成
答案 2 :(得分:1)
实际上,这是完全可能的。是的,您想通过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之后)
我可以通过别名为“ rs”的rlwrap启动SBCL
开始输入(def
(或其他任何内容)并点击TAB,并获得自动完成建议。
初学者奖金-如果您想在终端中从REPL编辑lisp,例如,用parinfer进行vim,请尝试使用magic-ed,这将允许您从repl编辑文件。配置SBCL以使用ED是深奥的。这样可以为您解决该问题。 https://github.com/sanel/magic-ed 借助选项卡自动完成功能和便捷的从终端编辑Lisp的方式,人们可以开始在终端中学习Common Lisp。
答案 3 :(得分:0)
如果您想使用sbcl,emacs和slime,请按照此Modern Common Lisp on Linux教程进行操作。该教程提到安装quicklisp
,特别是(ql:quickload "quicklisp-slime-helper")
,这是一个获取粘性以进行自动完成的elispscript等等。