我正在运行Aquamacs + Slime,当我启动Aquamacs时,我可以自动启动Slime。但是,当我尝试加载lisp文件后,我会不断收到各种错误,具体取决于我是如何尝试加载文件的。这是我的偏好.el
(setq inferior-lisp-program "~/ccl/dx86cl64"
slime-startup-animation nil)
(require 'slime)
(split-window-horizontally)
(other-window 1)
(slime)
(eval-after-load "slime"
'(progn
(slime-compile-and-load-file "/Users/xxxxx/xxxxx/load-seq.lisp")
))
我收到以下错误
error: Buffer *inferior-lisp* is not associated with a file.
我尝试了其他功能,包括load
compile-and-load
和slime-load-file
,并分别遇到以下错误......
Invalid read syntax: #
Symbol's function definition is void: compile-and-load
error: Not connected.
当我从粘液REPL执行(load "/Users/xxxxx/xxxxx/load-seq.lisp")
时,lisp文件加载(并编译)。看起来当我把它放在Preferences.el中时,即使我使用eval-after-load
,它也不会等待粘液加载。
答案 0 :(得分:5)
您碰巧误解了slime-compile-and-load-file
功能的使用。它的文档说:
(slime-compile-and-load-file &optional POLICY)
编译并加载缓冲区的文件并突出显示编译器注释。
该函数对已经与当前缓冲区关联的文件进行操作,并且它期望编译策略而不是文件名作为其(可选)参数。所以你的代码应该是这样的:
(slime)
(add-hook 'slime-connected-hook
(lambda ()
(find-file "/Users/xxxxx/xxxxx/load-seq.lisp")
(slime-compile-and-load-file)))
其中slime-connected-hook
包含SLIME连接到Lisp服务器时要调用的函数列表。
但是我不确定Emacs init文件是否适合加载这样的非Emacs Lisp代码。 CCL init文件是一个更好的地方。请参阅CCL手册中的2.4. Personal Customization with the Init File。
此外,load
函数用于执行Emacs Lisp代码。 slime-load-file
是一个正确的调用函数,但它恰好被调用得太早(或者在SLIME连接到Lisp服务器之前)。如果已将其添加到slime-connected-hook
挂钩,它将起作用。实际上,如果你没有一个有效的借口来编译Lisp代码,那么我建议slime-load-file
超过slime-compile-and-load-file
,无论你何时启动Emacs(并且你真的想在Emacs中这样做):
(add-hook 'slime-connected-hook
(lambda ()
(slime-load-file "/Users/xxxxx/xxxxx/load-seq.lisp")))
最后,没有名为compile-and-load
的函数。