有不少同学想在 Emacs 下用 slime 调试 clojure 程序,我也是其中之一,之所以这么选择是因为熟悉了 Emacs 异常方便的快捷键操作,非常清楚把这些快捷键跟 clojure 的 REPL 机制结合起来会让调试程序来非常顺手。
这个图很清楚地显示了这种调试方式的内部通信机制:
不过不幸的是,slime 和 clojure 是两个版本发布比较活跃的软件,常常出现的情况是:swank-clojure 刚刚修改好对最新版本的 clojure 的适配,clojure 又出新版本了,又有某些修改使得两者无法协调工作。
于是就悲剧了,搞半天都加载不成功。
我也被这个问题困扰许久,直到发现这篇文章(http://7thgen.info/blog/2010/12/clojure-for-mac-os-x/)
SLIME 一般的安装方式是到其主页下载最新的 CVS 版本使用,不过因为 Clojure 和 LISP 有些微妙的差异,而且本身还是个比较新的语言,关键机制的改变也比较多见,所以 swank-clojure 的实现经常赶不上 SLIME 最新的变化,于是 technomancy 维护了一个 SLIME 的分支,用来保持稳定在和最新版本 swank-clojure 能够协同工作的状态。technomancy 比较建议采用 Emacs 23 以后内置的包管理工具 ELPA 来安装这个版本的 SLIME,但是经我多次试验,总是有些问题,所以还是采用手工方式:
好了,下面是具体的操作步骤:
首先要保证安装了 git ,因为我们需要从 github 获取能协调工作的最新版本的 slime 和 swank-clojure,具体安装方式也很简单,在 mac上用 macport 就行了:
sudo port install git
然后建立一个目录,用来保存 slime 和 swank-clojure
mkdir github
接着进入这个目录,用 git 获取 slime 和 swank-clojure,分别保存在 clojure-mode 和 slime-new 目录下,命令如下:
cd github
git clone https://github.com/technomancy/clojure-mode.git clojure-mode
git clone https://github.com/technomancy/slime.git slime-new
具体执行显示如下:
Air:~ admin$ cd Github
Air:Github admin$
Air:GitHub admin$ git clone https://github.com/technomancy/clojure-mode.git clojure-mode
Cloning into clojure-mode...
remote: Counting objects: 1879, done.
remote: Compressing objects: 100% (1011/1011), done.
remote: Total 1879 (delta 815), reused 1879 (delta 815)
Receiving objects: 100% (1879/1879), 479.79 KiB | 199 KiB/s, done.
Resolving deltas: 100% (815/815), done.
Air:GitHub admin$ git clone https://github.com/technomancy/slime.git slime-new
Cloning into slime-new...
remote: Counting objects: 16450, done.
remote: Compressing objects: 100% (5583/5583), done.
remote: Total 16450 (delta 10862), reused 16450 (delta 10862)
Receiving objects: 100% (16450/16450), 13.70 MiB | 94 KiB/s, done.
Resolving deltas: 100% (10862/10862), done.
好了,现在已经把配套的 slime 和 swank-clojure 取回来了,接着就要配置你的 Emacs 配置文件 .emacs 了,打开该文件,加入如下内容:
(add-to-list 'load-path "~/Github/slime-new/")
(setq load-path (cons "~/Github/slime-new/" load-path))
(add-to-list 'load-path "~/Github/clojure-mode/")
(require 'clojure-mode)
现在就全部搞定了,先启动 Emacs ,按 M-x slime-connect
显示连接到本机 127.0.0.1 按回车
显示端口为 4005 按回车
就可以进入 clojure 的 REPL 界面了。