在emacs中为clojure使用哪个repl

在emacs中为clojure使用哪个repl,emacs,clojure,slime,Emacs,Clojure,Slime,我试图在emacs中设置一个用于编辑clojure的环境。我对emacs比较陌生 (仅1年)和全新的clojure(2周)。我在网上找到了很多关于如何设置的教程,其中大部分都是关于lein、swank clojure、slime和nrepl的。 似乎swank clojure和slime需要协同工作,但swank clojure已被弃用,所以剩下的是nrepl和一些内置的lisp repl模式 我首先尝试了低级lisp模式,因为它是clojure模式的默认模式,而且在我看来很好。但我似乎找不到在

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

我首先尝试了低级lisp模式,因为它是clojure模式的默认模式,而且在我看来很好。但我似乎找不到在其中轻松切换名称空间的方法

然后我尝试了emacs live,它就像是nrepl附带的emacs新手工具包。 然后我可以执行“nrepl jack in”以获得回复,即使它非常慢。。 它可以使用“C-CM-n”轻松切换名称空间。然而,在切换之后的某个时候,一个名为nrepl error的缓冲区会弹出,不让我关闭。我必须强制关闭emacs。此外,nrepl没有太多语法突出显示

总而言之: 在swank clojure被弃用之后,我应该使用哪个repl?粘液回复?nrepl?还是其他


我现在对clojure不太了解,所以我不确定哪项功能对repl很重要,但最好至少突出显示语法,并且可以在nrepl中的“C-C m-n”这样的名称空间和调试器之间轻松切换。

nrepl可能是您最好的选择。这是官方建议的swank clojure的替代品,安装起来非常简单。(至于SLIME,swank clojure是clojure的SLIME支持。swank是SLIME的后端通信渠道。如果您想使用SLIME,您将需要swank clojure-但当然,这已经被放弃,取而代之的是nREPL。)

我由衷地推荐nREPL.el,原因有很多:

  • swank clojure正式去世,但已经死了很长一段时间。虽然它已经完成了一些工作,但在它最初成立之后,并没有什么变化或改进。swank clojure的开发需要Common Lisp方面的大量专业知识,clojure开发人员通常缺乏这方面的知识,也不愿意获得这方面的知识

  • clojure模式2.0.0根本不支持swank clojure+SLIME。这一举措对clojure模式(删除了大量遗留代码)和nrepl.el(发布后其开发速度加快)都非常有益

  • nrepl.el正在快速地获取特性。我是它的贡献者之一,所以我应该知道:-)最近添加了很多很酷的东西,比如宏扩展、编译错误突出显示和多连接支持,仅举几例。更多的功能和改进正在进行中。el的体系结构比SLIME的简单得多,普通Clojure黑客更容易扩展nrepl.el

  • SLIME语法突出显示?REPL在SLIME和nrepl.el中具有相同的字体锁定,源缓冲区使用clojure模式的字体锁定。换言之,语法突出显示在这两种语言中是相同的

  • Emacs Live依赖于供应商化的git子模块,并且它所提供的扩展版本通常比上游版本落后一点。您可能希望尝试另一种方法,它也附带Clojure支持,但始终使用MELPA中提供的最新软件包

  • 没有
    slime repl
    (即在slime之外)。在这一点上,它只是swank clojure+SLIME或nrepl.el。鉴于nrepl.el现在实现了SLIME的大部分功能,您最好习惯使用nrepl.el

    更新


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

    我目前的经验是,nREPL.el比SWANK更不易使用;然而,无论是在功能方面还是在稳定性方面,它都在快速发展

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


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

    我曾经使用过emacs prelude,并且非常喜欢它。事实上,我昨天切换到emacs live,尝试它提供的一些很酷的功能,如撤销树和自动完成。它还声称拥有现成的clojure支持。我想复制它的一些功能,我的前奏曲配置一旦我学会了如何。因此,nrepl是一种选择。但我发现里面很少有语法亮点,我是不是遗漏了什么?还有,我是否可以从源缓冲区向nrepl发送代码(eval)?例如,如果我执行“C-x C-e”,我将在nrepl缓冲区中得到结果。
    M-x包列表包
    在Prelude中,您将能够安装撤销树和自动完成:-)我可能很快会为它们添加一些额外的配置。对于nrepl.el,通常的工作流程如下-
    C-C-k
    在源缓冲区中编译并加载到REPL中,您可以在那里轻松试用代码
    C-M-x
    可用于评估单个顶级表单,或
    C-x C-e
    评估最后一个表单。您可以使用
    C-C-z
    在源代码缓冲区和REPL缓冲区之间跳转。nrepl.el的README.md相当广泛。我会去试试。非常感谢!:)