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

加载通过'安装的软件包;包.el';在Emacs24中,emacs,elisp,dot-emacs,emacs24,Emacs,Elisp,Dot Emacs,Emacs24,可能重复: 我正在使用Emacs24。我添加了ELPA和果酱回购协议。使用“软件包”,我安装了“自动完成”。我在init.el中添加了以下行: (require 'auto-complete-config) (ac-config-default) 当我启动Emacs时,我得到了错误信息 文件错误:无法打开加载文件,自动完成配置 但是我用 M-x加载文件 并加载相同的~/.emacs.d/init.el文件,然后在提示下运行良好 正在加载/home/user/.emacs.d/init.el(

可能重复:

我正在使用Emacs24。我添加了ELPA和果酱回购协议。使用“软件包”,我安装了“自动完成”。我在init.el中添加了以下行:

(require 'auto-complete-config)
(ac-config-default)
当我启动Emacs时,我得到了错误信息

文件错误:无法打开加载文件,自动完成配置

但是我用

M-x加载文件

并加载相同的~/.emacs.d/init.el文件,然后在提示下运行良好

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

通常的加载与“M-x加载文件”命令有何不同?在init.el文件的开头,我做了以下操作,这是否会影响包的加载

(添加到列表“加载路径”~/.emacs.d”)
(加载“自定义代码”)


如下面的评论所述: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
添加到
加载路径中。Emacs加载路径不是递归的,因此这可能无法满足您的需要(假设您的库位于子目录中)。几年前,我写这个代码片段是为了加载我编写的各种elisp代码库。你可能会发现它很有用。(显然,它只在带有shell和find命令的unixy系统上工作。它的速度相当慢,但这似乎是
shell命令到string
,即使运行“echo hello”之类的命令也需要几毫秒)


很好,在'init.el'的开头添加(包初始化)完成了任务。谢谢。请参阅phils在该线程的副本中给出的答案,以获得正确的解决方案<代码>(包初始化)
可能不是解决此问题的正确方法。
(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)))))