带有 slime-fancy 的 clojure 和 common lisp 的 emacs 设置 (slime-autodoc)

标签 emacs clojure lisp common-lisp slime

我为 clojure 和普通 lisp 设置了 emacs,但我还想要 (slime-setup '(slime-fancy)) 用于普通 lisp。如果我将该行添加到 init.el,clojure 将无法工作:它会给我 repl,但在我运行任何代码后它会挂起。

我的配置

对于 Clojure:

  • 我通过 ELPA 设置了 clojure-mode、slime、slime-repl
  • 我在项目目录中运行 $ lein swank
  • 然后 M-x slime-connect 来破解 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 就会被破坏。但是 slime-fancy 是一个非常重要的元包,用于破解常见的 lisp。


有没有一种方法可以让它们同时工作,而无需更改配置并在我需要切换语言时重新启动?


更新

我发现加载了 slime-fancy 的 slime-autodoc 是挂起的原因。

(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)

此配置允许运行常见的 lisp 和 clojure SLIME。甚至同时。但是没有 slime-autodoc。

我还发现我使用的是 CVS 版本的 SLIME,因为我在 ELPA 代码之后手动执行 (add-to-list 'load-path "~/.elisp/slime")。那不能解决问题。也许有一个来自某个神奇日期的版本可以与 clojure 一起使用?这里有人说 CVS 版本适合他:http://www.youtube.com/watch?v=lf_xI3fZdIg&feature=player_detailpage#t=221s

最佳答案

这是一个解决方案。 (使用钩子(Hook))
这很丑陋但很方便。

(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)))))

关于带有 slime-fancy 的 clojure 和 common lisp 的 emacs 设置 (slime-autodoc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419544/

相关文章:

macros - Racket 宏不起作用

if-statement - 何时在 Clojure 中使用 "if"和 "when"?

list - 如何将文件中的列表添加到 Lisp

regex - Emacs:如何使用正则表达式替换字符串?

python - 使文件名/行号在 Emacs gud 缓冲区中可链接

Clojure:基于模式匹配的编程

clojure - 为什么 Clojure 中需要 attr-map?

function - 如何在 emacs lisp 函数中进行搜索

ruby - Emacs ruby​​ 符号单词补全

vim - 是否有项目为使用 Eclipse 代码库的 Emacs、VIM 和其他编辑器提供高级语言支持?