在使用史莱姆的emacs中找不到常见的lisp中的任何符号

时间:2013-04-03 14:27:41

标签: emacs common-lisp slime

根据互联网上的指南,我们可以通过键入Cc Cd h在HyperSpec中搜索emacs中的“格式”符号,但是,我只是不能让它工作,emacs只是提示没有完成符号。有人可以应付吗?提前谢谢!

2 个答案:

答案 0 :(得分:4)

您实际使用的是Slime REPL模式吗?有时候,在没有任何配置的情况下启动Slime时,你没有得到REPL模式,而是你将坐在*inferior-lisp*缓冲区中。

首先,检查缓冲区的标题是什么。如果它是*inferior-lisp*,则不是正确的。它应该是*slime-repl sbcl*(其中sbcl指的是你正在使用的CL实现)。

如果是这种情况,那么您需要确保在Emacs init文件中启用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进行模糊扩展。

答案 1 :(得分:0)

从使用Quicklisp(版本2.9)安装的SLIME版本切换到从MELPA安装的版本(版本20141010.1357,作为ac-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打开了一个隐藏缓冲区,其中包含一个名为&#34; Map_Sym.txt&#34;的空文件。在它。

使用C-h v buffer-file-name [RET]查看此文件的完整路径名,显示它已设置为&#34; / home / miki / file:/usr/share/doc/HyperSpec/Data/Map_Sym.txt" ;

作为一项实验,我尝试删除&#34;文件:/&#34;从我设置的最后两行开始,将它们读成:

(setq common-lisp-hyperspec-root "/usr/share/doc/HyperSpec/")
(setq common-lisp-hyperspec-symbol-table "/usr/share/doc/HyperSpec/Data/Map_Sym.txt")

它似乎解决了这个问题。为什么这样有效,我不知道(它与文档不同)。可能是一个错误或无证的变更?