用leiningen设置emacs / slime / swank与clojure

短版本:使用lein swank启动swank服务器时运行Mx slime-connect或Mx clojure-jack-in时出现错误。

我在Ubuntu 10.10上使用emacs 24.0.50.1。 我已经在ELPA的emacs中安装了以下软件包:clojure-mode,paredit,slime,slime-repl

我从github安装了leiningen并将其添加到classpath中,然后运行lein plugin install swank-clojure 1.3.3 。 之后,我创建了一个新的目录〜/ tmp /,cd进入它并运行: lein new test-project ,它似乎设置了一切正常。 然后我在emacs中打开/tmp/new-project/project.clj并将其更改为:

(defproject test-project "1.0.0-SNAPSHOT"
:description "Test Project"
:dependencies [[org.clojure/clojure "1.2.1"]
               [org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.3.3"]])

之后,我回到了/ tmp / new-project文件夹,运行lein deps然后lein swank下载依赖关系,并启动提供输出的lein swank服务器:

Connection opened on local port 4005.

回到emacs中,我遇到了将它连接到swank服务器的问题。 我试过打开core.clj文件并运行出现错误的Mx slime-connect

Symbol's function definition is void: define-slime-contrib

这让我觉得它要么没有看到swank服务器在运行,要么有一些配置需要完成才能看到服务器。 我也尝试过(打开相同的文件并打开project.clj) Mx clojure-jack-in我假设会尝试在项目文件夹中启动clojure REPL,但是会提供以下内容:

Debugger entered--Lisp error: (error "Could not start swank server: sh: lein: not found
")
signal(error ("Could not start swank server: sh: lein: not foundn"))
error("Could not start swank server: %s" "sh: lein: not foundn")
clojure-jack-in-sentinel(#<process swank> "exited abnormally with code 127n")

我从http://matthias-schneider.org/docs/clojure-setup/获取emacs软件包和lein安装程序的指示,然后从http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html开始按照测试配置说明进行操作有问题让Mx slime-connect打开REPL。

更新

删除〜/ tmp / test-project,卸载emacs和/.emacs.d/elpa/包,重新安装emacs,重新安装clojure-mode和paredit软件包,将〜/ .lein复制到/ bin以确保没有路径问题(wasn确定/.lein或/.lein/bin是否需要在路径中)。 Ran /.lein/bin/swank-clojure然后打开emacs,打开project.clj,并尝试Mx slime-connect ,它现在要求我提供一个主机(本地默认),端口(默认为4005),表示连接到swank ,给出了一个关于swank和slime版本不同(y或n)y的消息,那么minibuffers会error in process filter: Lisp connection closed unexpectedly给出error in process filter: Lisp connection closed unexpectedly 。 在运行/.lein/bin/swank-clojure的终端中弹出以下java错误:

exception in read loop
java.lang.NumberFormatException: For input string: "    a6"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:470)
at swank.core.protocol$read_swank_message.invoke(protocol.clj:41)
at swank.core.connection$read_from_connection.invoke(connection.clj:59)
at swank.core$read_loop.invoke(core.clj:337)
at swank.swank$connection_serve$fn__1486$fn__1487.invoke(swank.clj:32)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.AFn.applyTo(AFn.java:151)
at clojure.core$apply.invoke(core.clj:540)
at swank.swank$connection_serve$fn__1486.doInvoke(swank.clj:29)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:636)

更新:解决了,我需要卸载emacs并删除所有/.emacs.d/,而不仅仅是/ elpa /中的软件包。 重新安装后,我只有clojure模式包,而不是粘液或粘液重现。 现在可以连接Mx clojure-jack-in并准备好做一些工作!


你不需要安装粘液和粘液重现:它们嵌入到lein的插件中(参见jar:swank-clojure-1.4.0-SNAPSHOT.jar swank payload)。 你必须安装clojure模式。

另外,当“重新安装”时,请记得删除您的$ HOME目录中的隐藏文件夹.emacs.d,否则它会保留您之前下载的Emacs插件。

最后更喜欢clojure-jack-in,而不是slime-connect - 只是有粘液连接意味着你仍然在Emacs内有一个SLIME,所以你没有删除它。


我编写了一个初学者指南,用于设置自动完成和文档弹出的Emacs + nREPL客户端,因为大多数旧指令都不合适。 在这里可用。 可能对新人有所帮助。


无需安装lein swank插件。 你可以在project.clj文件中添加依赖关系,只需要lein swankMx slime-connect

尝试用swank-clojure“1.2.1”,它适用于我。

链接地址: http://www.djcxy.com/p/38601.html

上一篇: Setting up emacs/slime/swank for clojure with leiningen

下一篇: connection issue re