通过Emacs24中的“package.el”加载安装包

时间:2012-08-21 11:11:58

标签: emacs elisp dot-emacs emacs24

  

可能重复:
  Emacs 24 Package System Initialization Problems

我正在使用Emacs 24.我添加了ELPA和Marmalade回购。使用'package'我安装了'auto-complete'。我在init.el中添加了以下行:

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

当我启动Emacs时,我收到错误

  

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

然后我用

  

M-x加载文件

并加载相同的〜/ .emacs.d / init.el文件,然后在提示符

的情况下工作正常
  

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

通常的加载与“M-x加载文件”命令有何不同?在init.el文件的开头,我执行以下操作,这是以某种方式影响加载包。

  

(add-to-list'load-path“〜/ .emacs.d”)
  (加载“custom_code”)

1 个答案:

答案 0 :(得分:11)

正如以下评论中所述:phils对duplicate question的回答可能比这个更有帮助

这几乎可以肯定意味着您的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命令的unixy系统。它速度相当慢,但这似乎是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)))))