6

简短版本:使用 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"]])

之后,我回到 /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 设置,然后开始按照 http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html 的测试配置说明进行操作让 Mx slime-connect 打开 REPL 时遇到问题。

更新

删除 ~/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-mode 包,而不是 slime 或 slime-repl。现在可以连接M-x clojure-jack-in并准备做一些工作!

4

5 回答 5

2

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

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

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

于 2011-10-25T03:18:01.073 回答
2

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

于 2012-07-30T19:39:28.007 回答
1

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

尝试使用 swank-clojure “1.2.1”,它对我有用。

于 2011-10-23T06:17:24.040 回答
0

尝试执行以下操作,这对我在 Ubuntu 上使用 Emacs 24 有效:

  1. 安装莱宁根。确保您安装的目录lein位于$PATH!
  2. 安装 swank-clojure 插件:

    lein plugin install swank-clojure 1.3.3

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

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

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

    (使用此命令尝试一下。要永久使用,您$PATH应该更新.profile文件lein中的$PATH~/bin$PATH

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

于 2011-10-24T20:04:11.083 回答
0

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

:dev-dependencies [[lein-clojars "0.5.0"]
                   [swank-clojure "1.2.1"]]

我认为这是不正确的,如果您使用的是M-x clojure-jack-in. 删除这些线,运行lein deps和顶入对我有用。

于 2012-03-29T03:34:51.523 回答