使用leiningen为clojure设置emacs/slime/swank

ele*_*nt8 6 emacs clojure slime swank leiningen

短版本:使用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并将其添加到类路径中,然后运行 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"]])
Run Code Online (Sandbox Code Playgroud)

在那之后我又回到在/ tmp /新项目文件夹,跑lein deps然后lein swank下载依赖关系,并开始这给输出斯旺克服务器:

Connection opened on local port 4005.
Run Code Online (Sandbox Code Playgroud)

回到emacs是我遇到连接到swank服务器的问题.我试过打开core.clj文件并运行M-x slime-connect它会产生错误:

Symbol's function definition is void: define-slime-contrib
Run Code Online (Sandbox Code Playgroud)

这让我觉得它或者看不到swank服务器正在运行,或者有一些配置需要为它查看服务器.我也尝试过(打开同一个文件并打开project.clj)M-x 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 found\n"))
error("Could not start swank server: %s" "sh: lein: not found\n")
clojure-jack-in-sentinel(#<process swank> "exited abnormally with code 127\n")
Run Code Online (Sandbox Code Playgroud)

我从以下方向http://matthias-schneider.org/docs/clojure-setup/为emacs的包和雷音设置,然后开始下从测试配置说明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需要在路径中,请确保.然/.lein/bin/swank-clojure,然后打开emacs的,开了project.clj,并试图M-x slime-connect,现在问我的主机(本地默认),端口(4005默认),表示连接到自吹,给人以约斯旺克和煤泥版本不同消息(y或n)y,那么迷你车就给了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)
Run Code Online (Sandbox Code Playgroud)

更新: 解决了,我需要卸载emacs并删除所有/.emacs.d/,而不仅仅是/ elpa /中的包.重新安装后,我只有clojure模式包,而不是史莱姆或slime-repl.现在可以连接M-x clojure-jack-in并准备做一些工作!

rob*_*ann 2

你不需要安装 slime 和 slime-repl:它们嵌入到 lein 的插件中(参见 jar 内部:swank-clojure-1.4.0-SNAPSHOT.jar\swank\payload)。您必须仅安装 clojure 模式。

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

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