自动加载不是你要找的。它所做的只是在第一次需要时加载一些代码,这是扩展 Emacs 功能同时仍保持较低启动时间的便捷方式。
为了解决您的问题,我们必须考虑您真正想要做的事情:您只是希望在某个时刻加载您的一些代码,或者您是否希望对缓冲区中的缓冲区进行本地缓冲区自定义c-mode
?
如果你只是想让 Emacs 在启动时加载你的代码,要么将你的代码直接放入你的.emacs
文件中,要么使用load-file
orrequire
代替autoload
:
load-file
只需获取一个文件名,在该文件中加载 lisp 代码并对其进行评估。因此,如果您的代码位于名为“/path/to/my-c-setup.el”的文件中,您可以在 .emacs 中放入以下行,代码将在每次启动时加载:
(load-file "/path/to/my-c-setup.el")
也许您不想为您加载的每个文件提供绝对路径名。在这种情况下,您可以使用load-library
类似于load-file
但尝试在存储在变量中的任何目录中查找给定文件名的函数load-path
:
(add-to-list 'load-path "/path/to")
(load-library "my-c-setup.el")
优点是您add-to-list
只需执行一次该部分,所有后续调用load-library
都可以在该目录中找到代码。
另一种方法是提供/要求机制:您可以通过在其中进行调用来使您的 .el 文件“提供”某些功能(provide 'feature)
,例如
(provide 'my-c-mode-customizations)
然后(require 'feature)
在您的 .emacs 文件中添加一个相应的内容,您的代码也将被加载:
(require 'my-c-mode-customizations)
但是,如果您希望仅在缓冲区上激活时才加载代码c-mode
,则实现此目的的方法是通过 Emacs 的Hook机制:
挂钩是一个变量,您可以在其中存储现有程序在特定情况下要调用的一个或多个函数。
大多数主要模式都提供了一个可自定义的挂钩变量,您可以在其中添加函数,只要调用主要模式,就会调用这些函数。例如,c-mode 提供c-mode-hook
. 为了在为缓冲区打开 c-mode 时调用您自己的自定义项,请将它们放在一个函数中,例如,然后将以my-c-mode-customizations
下行添加到您的 .emacs 文件中:
(add-hook 'c-mode-hook 'my-c-mode-customizations)
当然,您仍然需要autoload
Emacs 实际找到该函数的定义。