以下是我为使 Common Lisp 和 Clojure 在同一个 Emacs 安装以及出色的 emacs-starter-kit 中工作所做的工作。这不会让您同时使用两者(您必须重新启动 Emacs 才能从 CL 切换到 Clojure,反之亦然)
我相信 ELPA 中的 SLIME 版本很旧,但适用于 Clojure。较新版本的 SLIME 不适用于 Clojure。此外,这个版本的 SLIME 似乎被剥离了(没有 swank-loader.el?)并且不能与 Common Lisp 一起使用。
这些是我为使其工作而采取的步骤,这对我有用。所有的钻头都在积极开发中,所以我认为这个领域很可能会被破坏。
使用新的 Emacs(根本没有配置,所以暂时将任何东西移到其他.emacs
地方)安装 ELPA:
http://tromey.com/elpa/install.html
在 Emacs 中,安装包“slime”和“slime-repl”。(M-x package-list-packages
然后选择并C-s slime
安装)i
x
将文件移入~/.emacs.d/elpa/slime-20100404
并~/.emacs.d/elpa/slime-repl-20100404
移至新目录,例如~/hacking/lisp/elpa-slime
.
扔掉 ELPA 安装:$ rm -rf .emacs.d
.
现在克隆 emacs-starter-kit 并将其移动到.emacs.d
. 我只使用来自 technomancy 的 Github 的新副本进行此操作,因此如果您有问题,请先尝试。
使用 CVS 获取最新的 SLIME:
cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot co cvs-slime
我认为 OS X 没有安装 CVS,所以你需要从 Macports、Homebrew 或其他地方安装它。
我放进cvs-slime
去了~/hacking/lisp
。
希望下面的 Emacs Lisp 的作用很明显:
(defun slime-common-lisp ()
(interactive)
(setq inferior-lisp-program "/usr/local/bin/sbcl") ; your Common Lisp impl
(add-to-list 'load-path "~/hacking/lisp/cvs-slime/") ; your SLIME from CVS directory
(require 'slime)
(slime-setup '(slime-repl))
(slime))
(defun slime-clojure ()
(interactive)
(add-to-list 'load-path "~/hacking/lisp/elpa-slime")
(require 'slime)
(slime-setup '(slime-repl))
(slime-connect "localhost" 4005))
对于 Clojure,您必须swank-clojure
在端口 4005 上启动 Clojure 运行时,我认为使用 Leiningen 是经过批准的方法:
创建一个新项目:
$ lein new project
$ cd project
在project.clj
:
(defproject newclj "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.2.1"]])
然后:
$ lein deps
$ lein swank
编辑添加:
如果您在使用此设置时发现 SLIME REPL 中的 Paredit 损坏,请查看:
http ://www.emacswiki.org/emacs/ParEdit#toc3
至少还有一个潜在的问题是,AFAICT,如果您打开 Common Lisp 源文件然后启动 SLIME,您将无法将表单从第一个缓冲区发送到 SLIME 缓冲区。所以在打开任何 Common Lisp 源文件之前打开一个 SLIME 缓冲区,它应该可以工作。这似乎不适用于 Clojure。
参考:
clojure 和 common lisp 的 emacs 设置,带有 slime-fancy (slime-autodoc)
https://github.com/technomancy/swank-clojure/issues/closed#issue/31/comment/544166