在Windows中让Emacs/Slime/Quicklisp/SBCL正常工作

3

我已经使用上述组合在Windows 7.0上使用了几个月。不幸的是,一位同事建议我将slime-helper.el安装到emacs中,结果是:Emacs Slime不再识别QL。

我正在使用Windows的SBCL 1.2.11,并且从命令行中,这个sbcl知道ql的安装情况。 这是我的.sbclrc文件

;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames
                       "Documents/LISP/.asdf-install-dir/systems/setup.lisp"
                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

I then typed

(ql:quickload "quicklisp-slime-helper")

它编译了很多。最后它说:
要使用,请将以下内容添加到您的~/.emacs文件中:
(load (expand-file-name "~/Documents/LISP/.asdf-install-dir/systems/slime-helper.el"))
;; Replace "sbcl" with the path to your implementation
(setq inferior-lisp-program "sbcl")

现在这是我.emacs文件中相应的部分。
(load "c:/Users/xyz/Documents/LISP/.asdf-install-dir/systems/slime-helper.el")
(setq inferior-lisp-program "c:\\Progra~1\\Steelb~1\\12BDCB~1.11\\sbcl.exe")

我启动了emacs,它正常地启动了。

M-x slime

仍然良好:

; SLIME 2015-06-01
CL-USER> 

但是,接下来:
(ql:quickload :my-project)

返回

Package QL does not exist.

但最糟糕的是,如果我从.emacs文件中删除slime-helper,它会再次识别quicklisp包,但每次调用ql时都会锁定emacs。我可以等待几分钟而没有任何响应。

感谢任何帮助。

2个回答

2
对于其他遇到这个问题的人,我也曾在使用Windows + Emacs + Slime + SBCL + QL时遇到类似的问题。最后,问题出在Windows认为我的主文件夹是什么,而Emacs(因此也包括Slime)则认为它是另外一个文件夹。
Windows:c:/users/username Emacs:c:/users/username/appdata/roaming
当我安装quicklisp时,我从cmd提示符中调用了SBCL,所以该过程将quicklisp文件夹和新的.sbclrc都安装在c:/users/username中。
Emacs Slime在c:/users/username/appdata/roaming中查找这些文件。
我通过将quicklisp文件夹和.sbclrc从c:/users/username移动到c:/users/username/appdata/roaming来解决了这个问题,因为我不打算除了通过Slime与SBCL交互之外再与其交互。

1
问题在于Emacs Slime (REPL)不知道quicklisp是否安装以及它的安装位置。您需要做的就是在Emacs' slime repl上重新安装quicklisp即可解决问题。("quicklisp.lisp"文件应该在SLIME REPL的当前工作文件夹中。)
M-x slime 
CL-USER> (load "quicklisp.lisp")
CL-USER> (quicklisp-quickstart:install)
CL-USER> (ql:add-to-init-file)

然后,quicklisp 将被重新安装在 Emacs 的 HOME 目录("~/")中。现在,你已经在 Windows 10 的 HOME 和 Emacs 的 HOME 中安装了相同的 quicklisp。如果你只在 Emacs 的 Slime REPL 中使用 quicklisp,则 Windows 10 HOME 中的副本是无用的,可以将其删除。


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