当Emacs启动时运行自己的代码

8
假设我有自己的elisp代码,位于~/bin/hello.el
~/.emacs文件中添加以下代码以在启动时运行hello.el
(add-to-list 'load-path "~/bin/elisp")
(require 'hello)

但是,我收到了以下错误消息。

警告(初始化):加载`/ Users / smcho / .emacs`时发生错误:

错误:未提供所需功能“hello”

这是什么问题?


顺便提一下,您可以考虑重新组织您的代码:不要使用 ~/.emacs 文件,而是使用 ~/.emacs.d/init.el 文件,Emacs 会自动找到并加载它,这样您就可以把所有的 elisp 代码放在 ~/.emacs.d 目录下。 - sanityinc
@sanityinc: 这与我的理解不同。你能检查一下<a href="https://dev59.com/9HA75IYBdhLWcg3wVneI">this</a>吗? - prosseek
是的,它是不同的,但我不确定你指的是哪种方式。这是我的配置(没有~/.emacs),如果有帮助的话:http://github.com/purcell/emacs.d - sanityinc
3个回答

16

hello.el提供hello功能吗?它应该以(provide 'hello)开始。请参阅elisp手册(load "hello.el")能工作吗?


在elisp代码的第一行应添加 'hello,谢谢。 - prosseek
(require) 和 (load) 有什么区别? - prosseek
(load)加载文件。(require)在使用时加载功能。一个文件可以提供多个功能,但我认为在使用功能之前不会评估文件中的代码(不要引用我关于确切语义的话)。Require本质上是说我将需要这个,找出它在哪里,并在需要时准备好它。 - deinst
3
实际上,惯例是在Emacs Lisp源文件的最后一行放置(提供'特性) - Bozhidar Batsov

3
您需要在您的LISP代码中添加类似以下内容:
(provide 'hello)
该语句可以提供一个名为“hello”的模块,以便其他程序可以使用该模块中的函数、变量等。

1
如果您将 ~/bin/elisp 添加到 load-path 中,则Emacs不会在 ~/bin 中找到文件。在这种情况下,Emacs会尝试加载 ~/bin/elisp/hello.el ,如果找不到它,然后会在 load-path 的其他部分中按顺序查找名为 hello.elc hello.el 的文件。

此外,正如其他人所提到的那样, hello.el 需要在其中包含(provide'hello)(通常在末尾)。


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