2

使用这个最小的初始化文件:

(setq package-load-list '((slime t)))
(setq inferior-lisp-program "clisp")
(package-initialize)
(setq package-enable-at-startup nil)
(require 'slime)
(slime-setup)
(slime)
(find-file "~/t/del.lisp")

除了查找文档外,一切似乎都可以正常工作,例如 slime-eval-defun 和 slime-complete-symbol。Mx slime-describe-symbol RET print RET 导致这个错误:

CLHS-ROOT: variable *CLHS-ROOT-DEFAULT* has no value

我需要在我的初始化文件中添加什么才能使其工作?

我还尝试下载 hyperspec tar 文件并将其解压缩到一个目录,这段代码:

(setq package-load-list '((slime t)))
(setq inferior-lisp-program "clisp"
      common-lisp-hyperspec-root "c:/run/HyperSpec/"
      common-lisp-hyperspec-symbol-table "c:/run/HyperSpec/Data/Map_Sym.txt")
(package-initialize)
(setq package-enable-at-startup nil)
(require 'slime)
(slime-setup)
(slime)
(find-file "~/t/del.lisp")

那也行不通。我不知道这个错误是在那个 init 文件中,还是在我使用的 SLIME 版本中,因为这是我第一次使用 SLIME。

版本:

  • 微软视窗 7
  • Emacs 24.3.1 版(可能是最新的稳定版)
  • SLIME 版本 20130626.1151(来自 MELPA 的最新版本)(来自 Marmalade 的一个说它无法编译 nil,我不知道那是什么意思,所以我改用来自 MELPA 的一个)
  • GNU CLISP 2.49(最新稳定版)

更新

C-c C-d f RET print RET工作正常。这绑定到slime-describe-function,这是未记录的,并且未在 SLIME 菜单中列出。还有slime-documentation-lookup一个绑定到C-c C-d C-d哪个可以在浏览器中打开变量(不仅仅是函数)的文档,这也有效。看起来只有 `slime-describe-symbol 不起作用。

4

2 回答 2

9

我没有在 Windows 上做过,但如果我是你,我会尝试用 Quicklisp 来做这个:(ql:quickload "clhs")并按照打印的说明进行操作。

我也会通过 Quicklisp 从 Quicklisp 获得 SLIME (ql:quickload "quicklisp-slime-helper"),但如果你的 slime 工作正常,则没有真正的需要。

于 2013-07-08T20:33:04.290 回答
0

假设 SLIME 是从 emacs 包存档(最好是 MELPA)安装的(并且安装了 GNU CLISP),以下是如何在 MS Windows 上安装 Common Lisp 和 SLIME的相关部分的组合:

假设在注释掉您已有的任何 SLIME 自定义代码后从头开始,首先将以下代码放入您的 init 文件中,该文件应在之后进行评估package-initialize

(setq inferior-lisp-program "clisp")
(setq slime-auto-connect 'ask)

(defun my-slime-setup ()
  (require 'slime)
  (slime-setup))
(defvar my--slime-setup-done nil)
(defun my-slime-setup-once ()
  (unless my--slime-setup-done
    (my-slime-setup)
    (setq my--slime-setup-done t)))
(defadvice lisp-mode (before my-slime-setup-once activate)
  (my-slime-setup-once))

这样做是定义 my-slime-setup 并确保如果您当天使用 SLIME,该函数只运行一次。my-slime-setup 也是一个容器,您可以在其中添加自己的 SLIME 自定义代码。

现在要将下载的文档连接到 SLIME,解压缩下载的存档,您将获得一个名为 的文件夹Hyperspec,然后将该文件夹移动到 Emacs 的 bin 目录,或其父目录,或其祖父目录,将以下代码放入 Emacs初始化文件。

(defun my-hyperspec-setup ()
  (let ((dir (locate-dominating-file invocation-directory "HyperSpec/")))
    (if dir
        (progn
          (setq common-lisp-hyperspec-root (expand-file-name "HyperSpec/" dir)))
      (warn "No HyperSpec directory found"))))

my-hyperspec-setup并 添加my-slime-setup如下:

(defun my-slime-setup ()
  (my-hyperspec-setup)
  (require 'slime)
  (slime-setup))

并重新启动 Emacs。

现在,当您M-x slime-describe-symbol RET print RET在 lisp 缓冲区中进行操作时,它应该在另一个缓冲区中显示 PRINT 的描述。

我应该承认我是从我自己的文章中采购的,并且在大约 8 个月后也回答了我自己的问题。答案是用 MELPA 的最新 SLIME 和香草 GNU Emacs 测试的。

于 2014-04-11T15:10:16.290 回答