在Emacs上同时运行Clojure和其他Lisp方言

6

我使用Aquamacs,而Aquamacs预装了SLIME

(setq inferior-lisp-program "/usr/local/bin/sbcl") #####!!!
(add-to-list 'load-path "/Library/Application Support/Aquamacs Emacs/SLIME/contrib")
(add-to-list 'load-path "/Library/Application Support/Aquamacs Emacs/SLIME")
(require 'slime)
(slime-setup)

有人在某个地方问到,我试图通过添加这段代码来使用Clojure。

(add-to-list 'load-path "~/clojure/clojure-mode")
(setq inferior-lisp-program "/Users/smcho/bin/clj") ################
(require 'clojure-mode)
(setq auto-mode-alist
  (cons '("\\.clj$ . clojure-mode")
     auto-mode-alist))
(add-hook 'clojure-mode-hook
  '(lambda ()
     (define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)))
)

我无法让SLIME与Clojure一起运行,但是我对当前的设置感到满意,唯一的问题是因为(setq inferior-lisp-program ...)代码,我必须根据我使用Clojure还是SBCL更改.emacs代码。
有没有办法解决这个问题?我可以在多个(次要的)Lisps之间选择吗?

添加

我可以让Clojure在Aquamacs上运行。请参考Running Clojure with 'lein swank' on Aquamacs problem。如果您想运行Aquamacs/Clojure,请忘记上面写的设置。您只需要一行代码:(slime-setup '(slime-repl))lein swank

添加了Lisp标签,以便Common Lisp SLIMErs可以查看;我希望他们比典型的Clojurian更经常地切换inferior^_superior Lisps。 - Michał Marczyk
1个回答

5
当启动SLIME时,您可以使用C-u M-x slime,而不仅仅是M-x slime,这样SLIME会要求您输入要启动的Lisp可执行文件的名称,已经填好了您的默认值。
还有一个名为slime-lisp-implementations的变量,我已经进行了如下配置:
(setq slime-lisp-implementations
      `((clojure ,(swank-clojure-cmd) :init swank-clojure-init)
        (sbcl ("sbcl") :coding-system utf-8-unix)))

我必须说我已经记不清这个功能对我有什么用处了(如果它确实有用的话)...输入C-h v slime-lisp-implementations以了解它大致的作用。如果我想启动它,似乎我必须输入sbcl,这对我来说很好,因为在我的SLIME中Clojure-to-SBCL比例很高。
更新:
我刚刚重新发现了M-- M-x slime(第一个键是负数参数的元减号),它会提示输入slime-lisp-implementations中Lisp实现的名称之一(带有制表符补全),然后启动所需的Lisp。使用上面的示例配置,M-- M-x slime sbcl将启动SBCL。
(我发现这个功能主要是因为它允许我们配置更复杂的命令来启动Lisp - 例如(sbcl-options ("sbcl" "--an-option" "--another-option") ...)(sbcl-clbuild ("/path/to/clbuild" "lisp") ...) - 并通过名称引用它们。)

顺便提一下,至少 (clojure ...) 实体肯定不会做任何事情,因为 swank-clojure 目前安排在 (Clojure) Swank 服务器启动之前替换它。 - Michał Marczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接