在Emacs中用于Clojure的哪个REPL?

9
我正在尝试在emacs中设置clojure编辑环境。我相对于emacs还比较新(只有1年),完全不了解clojure(2周)。我在网上找到了很多关于如何设置大部分内容的教程,其中大多数都涉及lein、swank-clojure、slime和nrepl。看起来,swank-clojure和slime需要共同使用,但是swank-clojure已经弃用了,所以剩下的就是nrepl和一些内置的lisp repl模式。
我首先尝试了inferior lisp mode,因为它是clojure-mode的默认模式,而且看起来很好。但是我似乎找不到在其中轻松切换命名空间的方法。
然后我尝试了emacs-live,它类似于一个针对emacs新手的套件,带有nrepl。我可以使用“nrepl-jack-in”获取repl,即使它非常慢。它可以通过“C-C M-n”轻松切换命名空间。然而,在切换后,一个名为“nrepl error”的缓冲区会弹出,并且无法让我关闭。我必须强制关闭emacs。此外,nrepl没有太多的语法高亮。
总之: 在swank-clojure被弃用后,应该使用哪个repl?slime-repl?nrepl?还是其他?
我现在对clojure不太了解,因此我不确定repl的哪些功能很重要,但至少具有类似于nrepl中的语法高亮和轻松切换命名空间(如“C-C M-n”),以及可能的调试器会很好。
3个回答

15
我非常推荐使用nREPL.el,原因如下:
  1. swank-clojure已经被正式宣布停止开发了,并且停滞了相当长的时间。虽然它可以完成一些工作,但在最初的启动后,它没有什么改变或改进。开发swank-clojure需要相当专业的Common Lisp技术知识,而Clojure开发者通常缺乏这种技能并且不愿意获得。

  2. clojure-mode 2.0.0根本不支持swank-clojure + SLIME,这对clojure-mode(它丢弃了许多遗留代码)和nrepl.el(在宣布后其开发速度加快)都非常有益。

  3. nrepl.el正在快速地增加功能。我是其中之一的贡献者,所以我应该知道 :-) 最近添加了很多很酷的功能,比如宏展开、编译错误突出显示和多连接支持等,仅列举几个。更多的功能和改进正在进行中。nrepl.el的架构比SLIME简单得多,普通的Clojure黑客能够更容易地扩展nrepl.el。

  4. SLIME语法高亮?在SLIME和nrepl.el中,REPL都使用相同的字体锁定,源缓冲区使用clojure-mode的字体锁定。换句话说,两者的语法高亮是相同的。

  5. Emacs Live依赖于供应商化的git子模块,并且一般情况下,它所提供的扩展版本落后于上游的最新版本。你可能想尝试一个替代方案Emacs Prelude,它也提供Clojure支持,但始终使用MELPA中可用的最新软件包。

在这个时候,SLIME没有slime-repl(除了SLIME之外)。现在nrepl.el实现了大多数SLIME的功能,所以最好开始使用nrepl.el。

更新

在0.2.0版本之后,nREPL.el被更名为CIDER。


我曾经使用过emacs prelude,并且非常喜欢它。事实上,昨天我切换到了emacs-live,以尝试一些它提供的很酷的功能,比如undo-tree和auto-complete。它还声称具有开箱即用的clojure支持。一旦我学会了,我想将其中一些功能复制到我的prelude配置中。所以nrepl是一个不错的选择。但是我发现它的语法高亮很少,我错过了什么吗?此外,有没有办法从源缓冲区向nrepl发送代码(eval)?例如,如果我执行“C-x C-e”,我将在nrepl缓冲区中得到结果。 - LoveProgramming
在Prelude中键入M-x package-list-packages,您就可以安装undo-tree和auto-complete :-) 我可能很快会为它们添加一些额外的配置。使用nrepl.el的常规工作流程如下 - 在源缓冲区中按C-c C-k编译并加载到REPL中,然后您可以轻松地在那里尝试代码。 C-M-x可用于评估单个顶级表单,或者使用C-x C-e来评估最后一个表单。您可以使用C-c C-z在源代码缓冲区和REPL缓冲区之间跳转。 nrepl.el的README.md非常详细。 - Bozhidar Batsov

3

nREPL可能是您最好的选择。它是swank-clojure的官方建议替代品,而且设置非常容易。(至于SLIME,swank-clojure就是Clojure的SLIME支持。SWANK是SLIME的后端通信渠道。如果您想使用SLIME,您需要swank-clojure - 但当然,现在nREPL已经取代了swank-clojure。)


1

目前我的经验是,与SWANK相比,nrepl.el的可用性略低;但它正在快速发展,无论是在功能还是稳定性方面。

安装Swank现在有点困难,因为Clojure-mode已经放弃了它,所以你需要一个旧版本。因此,我的建议是,如果你已经有一个可用的swank设置,请在几个月内不要更改任何内容;另一方面,如果你没有一个可用的设置,那么选择nrepl,因为它迟早会发生,而Swank将涉及旧版本。

如果最终使用nrepl,正如我所说,它还不完美,但请记住,总体来说事情只会变得更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接