9

我正在尝试设置一个用于在 emacs 中编辑 clojure 的环境。我对 emacs 比较陌生(只有 1 年),对 clojure 完全陌生(2 周)。我在网上找到了很多关于如何设置的教程,其中大部分都是关于 lein、swank-clojure、slime 和 nrepl 的。似乎 swank-clojure 和 slime 需要一起工作,但 swank-clojure 已被弃用,所以剩下的是 nrepl 和一些内置的 lisp repl 模式。

我首先尝试了低级 lisp 模式,因为它是 clojure-mode 的默认设置,而且对我来说看起来不错。但我似乎无法找到一种在其中轻松切换命名空间的方法。

然后我尝试了 emacs-live,它就像 nrepl 附带的 emacs 新手工具包。然后我可以执行“nrepl-jack-in”来获得 repl,即使它很慢。它可以使用“CC Mn”轻松切换命名空间。但是,切换后的某个时间,会弹出一个名为nrepl 错误的缓冲区,并且不会让我关闭。我不得不强制关闭 emacs。此外,nrepl 没有太多的语法高亮。

总结一下:在 swank-clojure 被弃用之后,我应该使用哪个 repl?粘液复制?nrepl? 还是其他人?

我现在对clojure不太了解,所以我不确定什么特性对repl很重要,但至少有语法高亮并且可以在nrepl中像“CC Mn”这样的命名空间之间轻松切换会很好,也许还有一个调试器。

4

3 回答 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 语法高亮?REPL 在 SLIME 和 nrepl.el 中具有相同的字体锁定,并且源缓冲区使用 clojure-mode 的字体锁定。换句话说 - 语法高亮在两者中是相同的。

  5. Emacs Live 依赖于供应商化的 git 子模块,通常它发布的扩展版本有点落后于上游。您可能想尝试作为替代Emacs Prelude,它也附带 Clojure 支持,但始终使用 MELPA 中可用的最新包。

没有slime-repl(在 SLIME 之外)。此时它只是 swank-clojure + SLIME 或 nrepl.el。鉴于 nrepl.el 甚至现在实现了 SLIME 的大部分功能 - 你最好习惯使用 nrepl.el。

更新

nREPL.el 在 0.2.0 版之后重命名为 CIDER。

于 2013-02-06T21:36:31.447 回答
3

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

于 2013-02-06T20:40:57.237 回答
1

我目前的经验是,nrepl.el 的可用性不如 SWANK。然而,无论是在功能方面还是在稳定性方面,它都在快速回升。

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

如果您最终得到 nrepl,正如我所说,它还不完美,但请记住,用一句话来说,事情只会变得更好。

于 2013-02-07T16:24:08.793 回答