我为clojure和普通的lisp设置了emacs,但我也希望(slime-setup'(slime-fancy))用于常见的lisp。如果我将该行添加到init.el,clojure将无法工作:它给了我repl,但它在我运行任何代码后挂起。
对于clojure:
对于常见的lisp,我将它放在init.el中的ELPA代码之后:
(add-to-list 'load-path "~/.elisp/slime")
(require 'slime)
(add-to-list 'slime-lisp-implementations '(sbcl ("/opt/local/bin/sbcl") :coding-system utf-8-unix))
;; (slime-setup '(slime-fancy))
因此,如果我取消注释最后一行,clojure将被破坏。但是,对于黑客攻击普通的lisp来说,这是一个非常重要的元数据包。
有没有办法在不改变配置的情况下将它们设置为工作状态,并在需要切换语言时重新启动?
我发现装有粘液的slime-autodoc是挂起的原因。
(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)
此配置允许运行常见的lisp和clojure SLIME。甚至同时。但没有史莱姆 - autodoc。
我也发现我正在使用SLIME的CVS版本,因为我在ELPA代码之后手动执行(add-to-list'load-path“〜/ .elisp / slime”)。这并没有解决问题。也许有一个魔法约会的版本与clojure一起使用?在这里,一个人说CVS版适合他:http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s
答案 0 :(得分:8)
这是一个解决方案。 (使用挂钩)
这很难看但很方便。
(add-hook 'slime-connected-hook
(lambda ()
(if (string= (slime-lisp-implementation-type) "Clojure")
(setq slime-use-autodoc-mode nil)
(setq slime-use-autodoc-mode t))
))
(add-hook 'slime-mode-hook
(lambda ()
(if (eq major-mode 'clojure-mode)
(slime-autodoc-mode 0)
(slime-autodoc-mode 1))))
<强>更新强>
如果问题仍然存在于slime-repl
缓冲区中,请尝试以下代码:
(add-hook 'slime-repl-mode-hook
(lambda ()
(if (string= (slime-lisp-implementation-type) "Clojure")
(progn (setq slime-use-autodoc-mode nil)
(slime-autodoc-mode 0))
(progn (setq slime-use-autodoc-mode t)
(slime-autodoc-mode 1)))))
答案 1 :(得分:4)
我最近一直在考虑同样的问题。问题是ELPA中的SLIME被削减了,对于Common Lisp来说几乎没用。解决问题的一种方法是从与ELPA包结账的相同日期检出CVS中的SLIME,并手动添加缺少的东西。 #clojure上有人告诉我他这样做了,解决方案有效。 我个人认为这样的解决方案非常难看,但是直到有人设法将Clojure支持转移到上游SLIME上才会有更好的解决方案。
或者你可以逐个添加功能到slime-setup,看看究竟是什么功能导致了Clojure评估的问题 - 毕竟粘性幻想只是一个只加载最流行的contrib功能的元特征。
顺便说一句,你不需要行
(add-to-list 'load-path "~/.elisp/slime/contrib")
(setq slime-backend "~/.elisp/slime/swank-loader.lisp")
(require 'slime)
contrib dir将自动添加到加载路径,后端是默认值,如果你使用'slime-autoloads,你应该在此之前需要粘液,因为这会破坏自动加载的目的。
答案 2 :(得分:1)
我使用sbcl,clozure和clojure:Getting Emacs, Slime, Common Lisp (SBCL, Clozure), and Clojure to Work Together