首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用leiningen为clojure设置emacs/slime/swank

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

Stack Overflow用户
提问于 2011-10-23 06:11:39
回答 5查看 4.4K关注 0票数 6

短版本:在使用lein swank启动swank服务器时,运行M粘液连接或jack-in时出现错误。

我在Ubuntu10.10上使用emacs 24.0.50.1。我已经在ELPA的emacs中安装了以下软件包: clojure-mode,paredit,肠液,粘液-repl

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

代码语言:javascript
复制
(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文件夹,然后运行lein deps,然后运行lein swank下载依赖项并启动swank服务器,该服务器提供输出:

代码语言:javascript
复制
Connection opened on local port 4005.

回到emacs中,我遇到了让它连接到swank服务器的问题。我尝试打开core.clj文件并运行M-x slime-connect,这会导致错误:

代码语言:javascript
复制
Symbol's function definition is void: define-slime-contrib

这让我觉得它要么没有看到swank服务器在运行,要么需要做一些配置才能看到服务器。我还尝试了(使用相同的文件打开和project.clj打开)M-x clojure-jack-in,我假设它尝试在项目文件夹中启动clojure REPL,但这提供了以下内容:

代码语言:javascript
复制
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")

我遵循http://matthias-schneider.org/docs/clojure-setup/对emacs包和lein设置的指导,然后在获得M粘液连接以打开REPL时,开始遵循来自http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html的测试配置说明。

更新

删除~/tmp/test-project,卸载emacs和/.emacs.d/elpa/包,重新安装emacs,重新安装clojure模式和paredit包,将~/..lein复制到/bin中以确保没有路径问题(不确定/.lein或/..lein/bin是否需要在路径中)。运行/.lein/bin/swank-clojure,然后打开emacs,打开project.clj,然后尝试M-x slime-connect,它现在要求我要主机(本地默认值),端口(4005默认值),表示连接到swank,给出关于swank和粘液版本不同(y或n) y的消息,然后微型缓冲区给error in process filter: Lisp connection closed unexpectedly。在我运行/.lein/bin/swank-clojure的终端中,会弹出以下java错误:

代码语言:javascript
复制
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/中的包。在重新安装之后,我只得到了关闭模式包,而不是粘稠或粘稠的包。现在可以连接到M-x clojure-jack-in,并准备好做一些工作!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-25 03:18:01

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

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

最后,更喜欢clojure-插孔,而不是黏-连接-只是有黏液-连接意味着你仍然有一个黏液在Emacs中,所以你没有删除它。

票数 2
EN

Stack Overflow用户

发布于 2012-07-30 19:39:28

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-23 06:17:24

不需要安装lein插件。您可以在project.clj文件中添加依赖项,只需添加lein swank & M-x slime-connect

试试swank-clojure的"1.2.1",它对我有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档