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

时间:2011-10-23 06:11:40

标签: emacs clojure slime swank leiningen

简短版本:使用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联系,并准备好做一些工作!

5 个答案:

答案 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:

  1. 安装Leiningen。确保lein
  2. 上安装$PATH的目录
  3. 安装swank-clojure插件:

    lein plugin install swank-clojure 1.3.3

  4. 使用lein new创建新项目。不要将swank-clojure添加到:dev-dependencies。 (你真的只需要一个或另一个,插件或:dev-dependencies中的条目。)

  5. 启动Emacs,确保它可以在lein上“看到”$PATH,例如像这样:

    PATH=$PATH:/path-to/dir-where/lein-is emacs

    (使用此命令进行试用。要永久使用,您应该更新$PATH文件中的.profile或在lein已经位于$PATH的位置在标准的Ubuntu安装中,~/bin应该在$PATH上。)

  6. 从项目中打开一个文件,例如project.clj,并运行M-x clojure-jack-in。这应该启动Swank服务器并将SLIME REPL连接到它。

答案 4 :(得分:0)

当我从旧版本克隆其他人的clojure项目时,这发生在我身上。他们的project.clj有:

:dev-dependencies [[lein-clojars "0.5.0"]
                   [swank-clojure "1.2.1"]]
如果您使用M-x clojure-jack-in,我认为

是不正确的。删除这些行,运行lein deps并为我工作。

相关问题