简短版本:使用lein swank启动swank服务器时运行M-x slime-connect或M-x clojure-jack-in时出错。
我在Ubuntu 10.10上使用emacs 24.0.50.1。我在ELPA的emacs中安装了以下软件包:clojure-mode,paredit,slime,slime-repl
我从github& amp;安装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"]])
之后我回到/ tmp / new-project文件夹并运行lein deps
然后lein swank
下载依赖项并启动提供输出的swank服务器:
Connection opened on local port 4005.
回到emacs是我遇到连接到swank服务器的问题。我尝试打开core.clj文件并运行M-x slime-connect
,这会产生错误:
Symbol's function definition is void: define-slime-contrib
这让我觉得它没有看到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")
我正在关注来自http://matthias-schneider.org/docs/clojure-setup/的emacs软件包和lein设置的指示,然后在我遇到Mx slime-connect打开REPL时出现问题后,开始按照http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html的测试配置说明进行操作。
更新:
删除了〜/ tmp / test-project,卸载了emacs和/.emacs.d/elpa/包,重新安装了emacs,重新安装了clojure-mode和paredit包,将〜/ .lein复制到/ bin中以确保没有路径问题(不确定/.lein或/.lein/bin是否需要在路径中)。跑/.lein/bin/swank-clojure
然后打开emacs,打开project.clj,然后尝试M-x slime-connect
,现在要求我输入主机(本地默认),端口(默认为4005),说连接到swank,给出一个关于swank和slime版本不同(y或n)y的消息,然后minibuffers给出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模式包,而不是史莱姆或slime-repl。现在可以与M-x clojure-jack-in
联系,并准备好做一些工作!
答案 0 :(得分: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,所以你没有删除它。
答案 1 :(得分:2)
我写了一本初学者指南,用于设置Emacs + nREPL客户端,其中包含自动完成和文档弹出窗口,因为大多数旧指令都不合适。可用here。可能对新手有所帮助。
答案 2 :(得分:1)
无需安装lein swank插件。您可以在project.clj文件中添加依赖项,只需添加lein swank
&amp; M-x slime-connect
。
尝试使用swank-clojure“1.2.1”,它对我有用。
答案 3 :(得分:0)
尝试执行以下操作,这适用于Ubuntu上的Emacs 24:
lein
!$PATH
的目录
安装swank-clojure插件:
lein plugin install swank-clojure 1.3.3
使用lein new
创建新项目。不要将swank-clojure
添加到:dev-dependencies
。 (你真的只需要一个或另一个,插件或:dev-dependencies
中的条目。)
启动Emacs,确保它可以在lein
上“看到”$PATH
,例如像这样:
PATH=$PATH:/path-to/dir-where/lein-is emacs
(使用此命令进行试用。要永久使用,您应该更新$PATH
文件中的.profile
或在lein
已经位于$PATH
的位置在标准的Ubuntu安装中,~/bin
应该在$PATH
上。)
从项目中打开一个文件,例如project.clj
,并运行M-x clojure-jack-in
。这应该启动Swank服务器并将SLIME REPL连接到它。
答案 4 :(得分:0)
:dev-dependencies [[lein-clojars "0.5.0"]
[swank-clojure "1.2.1"]]
如果您使用M-x clojure-jack-in
,我认为是不正确的。删除这些行,运行lein deps
并为我工作。