现在有了1.2版本,该怎么办才能让它使用1.2呢?我必须手动完成吗?我必须等待slime/swank进行更新以使用1.2吗?
更新:感谢推荐使用leiningen,但我想让emacs自己启动REPL。这个问题是否因为ELPA中的swank-clojure包没有被更新而发生的?
使用Leiningen 1.3,创建一个独立的Swank会话非常容易:
$ lein install swank-clojure 1.3.0-SNAPSHOT
$ ~/.lein/bin/swank-clojure
M-x slime-connect
~/.clojure
和 ~/.swank-clojure
上的类路径中。您可以通过设置 swank-clojure-classpath
变量来自定义此设置(我将其自定义为仅使用 ~/.clojure
;那是我放置用于启动一次性实验 REPL 的基本 jar 集合的地方)。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实例;请参阅README以获取详细信息。
现在,老实说,我自己倾向于从Emacs内部启动Swank - 这可能有点棘手(因此可能不建议初学者这样做),但稍后非常方便。请参见我的答案,其中包含我用于启动针对Leiningen-style项目进行正确类路径配置的Clojure-specific Swank实例的函数的一个版本。
我使用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从网络上下载依赖项,这使得项目非常小且快速进行版本控制。
运行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]>
现在你可以使用 M-x slime-connect 命令在 Emacs 中连接并接受默认设置。
在你使用 M-x slime 之前,你只需要设置 swank-clojure-classpath 变量即可。
假设你的 c:\jars 目录下有 clojure.jar、clojure-contrib.jar 和 swank-clojure.jar。
将以下代码粘贴到 scratch 缓冲区:
(setq swank-clojure-classpath '("c:/jars/clojure.jar" "c:/jars/cloure-contrib.jar"
"c:/jars/swank-clojure.jar"))
https://github.com/jochu/swank-clojure/blob/master/swank-clojure.el#L32-34
~/.clojure
中(确保~/.swank-clojure
中没有冲突的jar包),希望M-x slime
对您有用。 - Michał Marczyk