在Emacs24中加载通过'package.el'安装的软件包

10

可能是重复问题:
Emacs 24包系统初始化问题

我正在使用Emacs 24。我已经添加了ELPA和Marmalade仓库。使用“package”我安装了“auto-complete”。我在我的init.el中添加了以下行:

(require 'auto-complete-config)
(ac-config-default)

当我启动Emacs时,会出现以下错误信息:

文件错误:无法打开加载文件auto-complete-config

但是当我使用以下命令:

M-x load-file

并加载相同的~/.emacs.d/init.el文件时,它会正常工作,并显示如下提示:

正在加载/home/user/.emacs.d/init.el(源)...完成

通常的加载方式与'M-x load-file'命令有何不同?在init.el文件的开头,我使用以下命令,这是否会影响包的加载?

(add-to-list 'load-path "~/.emacs.d")
(load "custom_code")

1个回答

11
如下方评论所提到的:phils在重复问题的回答可能比这个更有帮助。
这几乎肯定意味着你的init.el文件在处理package.el包时被运行。后者会将带有自动完成库的目录添加到您的加载路径中。
我仍在使用ELPA,而不是package.el。对于elpa,有一个片段看起来像这样,会安装在您的.emacs底部。
;;; This was installed by package-install.el.
;;; This provides support for the package system and
;;; interfacing with ELPA, the package archive.
;;; Move this code earlier if you want to reference
;;; packages in your .emacs.
(when
    (load
     (expand-file-name "~/.emacs.d/elpa/package.el"))
  (package-initialize))

如评论所建议的那样,您可能想要将等效的 package.el 初始化代码放在加载 init.el 的内容之前。
最后:我注意到您提到将.emacs.d添加到您的load-path中。Emacs的加载路径不递归,因此如果您的库位于子目录中,则可能无法做到这一点。几年前,我编写了这个片段来加载我编写的各种elisp代码库。您可能会发现它有用。(显然,它仅适用于具有shell和find命令的类Unix系统。它相当慢,但这似乎是 shell-command-to-string ,即使运行“echo hello”等也需要几毫秒)
(defun find-elisp-dirs (dir)
  "Find all directories below DIR containing elisp sources, ignoring those"
  (split-string
   (shell-command-to-string
    (format "find %s -iname '*.el' -printf '%%h\\n' | sort -u"
            (expand-file-name dir t)))))

2
很好,在“init.el”的开头添加(package-initialize)就完成了任务。谢谢。 - pcx
请查看 phils 在此重复线程的答案,以获取正确的解决方案;(package-initialize) 可能并不是修复此问题的正确方法。 - Erik Kaplun

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