【问题标题】:Enabling autocomplete in sbcl在 sbcl 中启用自动完成
【发布时间】:2011-07-19 17:51:09
【问题描述】:

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

* (requi<tab>

&lt;tab&gt; 是文字制表符,我没有得到完成列表,而是一个详细的制表符。在 clisp 中,&lt;tab&gt; 将完成上一行到* (require

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

【问题讨论】:

    标签: autocomplete lisp sbcl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我在 SBCL 手册中找不到任何关于它的内容,所以我想没有内置的补全支持。我只能支持使用 SLIME 的建议,它甚至有多种补全系统可供选择。特别是模糊完成很棒。您还可以在 SLIME REPL 中使用 &lt;tab&gt; 完成。 (它至少对我有用,而且我不需要配置任何东西来实现它。) 编辑:我只看到 C-c C-i 现在是非 repl SLIME 缓冲区中正确的完成键绑定。这对我来说是新的,它曾经是 M-C-i。
      • 嗯,一个问题是我使用 vim,而不是 emacs。我尝试过交换,但是使用 vipermode(或类似的)设置 emacs 并根据我的喜好对其进行调整以使其适合我的工作量太大了。因此,至少目前,粘液不是一种选择。我确实为 vim 使用了一个受粘液启发的插件,但它并没有那么强大。无论如何,这就是我对完成 SBCL 的标准 REPL 感兴趣的原因。无论如何,谢谢你的回答。对 emacs 进行新的尝试让我更有灵感。
      【解决方案3】:

      其实完全有可能。是的,您想通过 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 借助 tab 自动补全和从终端编辑 lisp 的便捷方式,您可以在终端开始学习 Common Lisp。

      【讨论】:

      • 普通用户可以创建~/.sbcl_completions,而不是创建/usr/share/rlwrap/completions/sbcl(这可能需要超级用户权限才能创建)。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-15
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2010-10-27
        • 2016-02-03
        • 2012-06-26
        相关资源
        最近更新 更多