3

我刚刚设置了一个新的 emacs 安装,安装了 ELPA 并使用 ELPA 安装了 swank-clojure。虽然 Clojure 1.2 发布了,但当我点击“Mx slime”时,它仍然为我下载了 Clojure 1.1 而不是 1.2

既然它可用,我如何让它使用 1.2?我必须手动完成吗?我是否必须等待 slime/swank 更新才能使用 1.2?

更新:感谢使用 leiningen 的建议,但我所追求的是让 emacs 自己启动一个 REPL。出现这个问题是因为 ELPA 中的 swank-clojure 包没有更新吗?

4

4 回答 4

5

使用 Leiningen 1.3,很容易创建一个独立的 swank 会话:

$ lein install swank-clojure 1.3.0-SNAPSHOT
$ ~/.lein/bin/swank-clojure

您可以将 ~/.lein/bin 添加到您的 $PATH 以使这更容易。

然后在 Emacs 中:

M-x slime-connect

如果您在项目目录中,则可以使用Mx lein-swank从 Emacs 内部启动 swank。但是,通过 swank-clojure.el 自动下载和安装 Clojure 和其他依赖项容易出错且已弃用。

于 2010-08-21T00:19:58.097 回答
3

我相信通过您描述的那种设置,M-x slime会将所有内容放入~/.clojure~/.swank-clojure路径中。您可以通过设置swank-clojure-classpath变量来自定义它(我将其自定义为~/.clojure仅使用;这就是我放置用于启动一次性实验性 REPL 的基本 jar 集的地方。

一旦您在类路径上需要更多东西,上述内容就不够了。管理这些更复杂的案例有两种选择:

选项 1:启动 Swank,然后连接

最直接的方法是使用Leiningen。把它放在你的project.clj

(defproject repl-base "1.0.0-SNAPSHOT"
  :description "A project to start Swank in."
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]]
  :dev-dependencies [[swank-clojure "1.2.1"]])

然后lein swank在您的项目目录中使用来启动一个 swank 服务器并用于M-x slime-connect从 Emacs 中连接到它。

作为另一种可能性,David Edgar Liebke 的cljr显然会为您启动独立的 Swank 实例;有关详细信息,请参阅自述文件。

选项 2:从 Emacs 中启动 Swank

现在,老实说,我倾向于自己从 Emacs 中启动 Swank —— 设置起来可能有点棘手(因此一开始可能不建议),但后来很方便。请参阅对旧问题的回答,了解我用来启动 Clojure 特定 Swank 实例的函数的一个版本,并为 Leiningen 风格的项目配备了适当的类路径配置。

于 2010-08-20T23:16:17.763 回答
1

我使用 leiningen 将 emacs slime 连接到 clojure 实例。在一个项目中,您总是会得到几个依赖项,这些依赖项 leiningen 很好地放置在类路径中。

它使用一个小的 clojure 文件来描述依赖关系,例如:

(defproject myprojecy "0.1.0-SNAPSHOT"
   :description "A project."
   :dependencies [[org.clojure/clojure "1.2.0-beta1"]
                 [org.clojure/clojure-contrib "1.2.0-beta1"]]
   :dev-dependencies [[swank-clojure "1.2.1"]])

您可以看到更改版本只是编辑器中的几次击键。Leiningen 从 'net 下载依赖项,这使项目真正小而快速地进行版本控制。

运行 lein swank 启动程序和 swank 中的 repl:

ptimac:cljhack pti$ lein swank
user=> Connection opened on local port  4005
#<ServerSocket ServerSocket[addr=localhost/127.0.0.1,port=0,localport=4005]>

您现在可以使用 Mx slime-connect 在 emacs 中连接并接受默认值。

于 2010-08-20T23:16:28.420 回答
0

您只需要在点击 Mx slime 之前设置 swank-clojure-classpath 变量

假设你在 c:\jars 下有 clojure.jar、clojure-contrib.jar 和 swank-clojure.jar

在暂存缓冲区中粘贴这个

(setq swank-clojure-classpath '("c:/jars/clojure.jar" "c:/jars/cloure-contrib.jar" 
"c:/jars/swank-clojure.jar"))

点击 Cx Ce 和 Mx slime ,应该可以。

详情结帐

https://github.com/jochu/swank-clojure/blob/master/swank-clojure.el#L32-34

http://en.wikibooks.org/wiki/Clojure_Programming/FAQ#Where_does_swank-clojure_.28SLIME.29_look_for_Clojure.27s_jars.3F

于 2011-01-23T09:48:26.773 回答