使用这个最小的init文件:
(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。 M-x粘液描述符号RET打印RET导致此错误:
CLHS-ROOT: variable *CLHS-ROOT-DEFAULT* has no value
我需要在init文件中添加什么才能使其正常工作?
我还尝试下载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")
这也不起作用。我不知道这个bug是在那个init文件中,还是在我正在使用的SLIME版本中,因为这是我第一次使用SLIME。
版本:
更新
C-c C-d f RET print RET
运行正常。这绑定到slime-describe-function
,这是未记录的,并未在SLIME菜单中列出。还有slime-documentation-lookup
绑定到C-c C-d C-d
,它可以在浏览器中打开变量(不仅仅是函数)的文档,并且也可以。看起来只有`slime-describe-symbol不起作用。
答案 0 :(得分:8)
我还没有在Windows上完成它,但如果我是你,我会尝试使用Quicklisp:(ql:quickload "clhs")
并按照打印的指示进行操作。
我也会通过(ql:quickload "quicklisp-slime-helper")
从Quicklisp获得SLIME,但是如果你的粘液工作正常,则没有真正需要。
答案 1 :(得分:0)
假设SLIME是从emacs包存档(最好是MELPA)安装的(并且安装了GNU CLISP),这里是How to install Common Lisp and SLIME on MS Windows的相关部分的组合:
假设在评论出您已有的任何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 init文件中。
(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。
现在当你在lisp缓冲区中执行M-x slime-describe-symbol RET print RET
时,它应该在另一个缓冲区中显示PRINT的描述。
我应该承认,我从自己的文章中采购,并在大约8个月后回答我自己的问题。答案是使用MELPA的最新SLIME和香草GNU Emacs进行测试的。