根据网上的指南,我们可以在 HyperSpec 中通过键入 Cc Cd h 在 Emacs 中搜索“格式”之类的符号,但是我就是无法让它工作,emacs 只是提示符号没有完成。有人能应付吗?提前致谢!
2 回答
你真的在使用 Slime REPL 模式吗?有时,在没有任何配置的情况下启动 Slime 时,您不会进入 REPL 模式,而是坐在*inferior-lisp*
缓冲区中。
首先,检查缓冲区的标题是什么。如果是*inferior-lisp*
,则不是正确的。它应该*slime-repl sbcl*
是(其中 sbcl 指的是您正在使用的 CL 实现)。
如果是这种情况,那么您需要确保在您的 Emacs 初始化文件中启用 slime-fancy。这就是我所拥有的:
(defun init-slime-configuration ()
(slime-setup '(slime-fancy slime-fuzzy))
(setq slime-load-failed-fasl 'never)
(define-key slime-repl-mode-map (kbd "C-<tab>") 'slime-fuzzy-complete-symbol)
(define-key slime-mode-map (kbd "C-<tab>") 'slime-fuzzy-complete-symbol))
(add-hook 'slime-load-hook 'init-slime-configuration)
这也允许我使用 C-TAB 进行模糊扩展。
从使用 Quicklisp(2.9 版)安装的 SLIME 版本切换到从 MELPA(20141010.1357 版,作为 ac-slime 的依赖项)安装的 SLIME 版本后,我遇到了这个问题。
使用 Quicklisp 的 SLIME 与我的本地 HyperSpec 副本配合使用,使用以下设置:
(require 'slime-autoloads)
(add-to-list 'slime-contribs 'slime-fancy)
(setq slime-lisp-implementations
'((ccl ("ccl"))
(clisp ("clisp"))
(cmucl ("cmucl"))
(ecl ("ecl"))
(sbcl ("sbcl"))))
(setq slime-default-lisp 'sbcl)
(setq common-lisp-hyperspec-root "file:/usr/share/doc/HyperSpec/")
(setq common-lisp-hyperspec-symbol-table "file:/usr/share/doc/HyperSpec/Data/Map_Sym.txt")
然后我完全删除并重新安装了 Quicklisp(无需重新安装 SLIME!),然后使用 Emacs 包管理器从 MELPA 安装 ac-slime。
我碰巧注意到,当我尝试在 HyperSpec 中查找文档时,Emacs 打开了一个隐藏缓冲区,其中包含一个名为“Map_Sym.txt”的空文件。
查看这个文件的完整路径名,C-h v buffer-file-name [RET]
发现它被设置为“/home/miki/file:/usr/share/doc/HyperSpec/Data/Map_Sym.txt”。
作为一项实验,我尝试从设置的最后两行中删除“file:/”,以使它们读取:
(setq common-lisp-hyperspec-root "/usr/share/doc/HyperSpec/")
(setq common-lisp-hyperspec-symbol-table "/usr/share/doc/HyperSpec/Data/Map_Sym.txt")
它似乎已经解决了这个问题。为什么这样有效,我不知道(它与文档不同)。也许是错误或未记录的更改?