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

pcx*_*pcx 10 emacs elisp dot-emacs emacs24

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

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

(require 'auto-complete-config)
(ac-config-default)
Run Code Online (Sandbox Code Playgroud)

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

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

但后来我用了

Mx加载文件

并加载相同的〜/ .emacs.d/init.el文件,然后它提示工作正常

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

通常的加载与'Mx load-file'命令有什么不同?在init.el文件的开头我执行以下操作,这是以某种方式影响加载包.

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

Rup*_*ick 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))
Run Code Online (Sandbox Code Playgroud)

正如评论所暗示的那样,您可能希望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)))))
Run Code Online (Sandbox Code Playgroud)

  • 好的,在'init.el'的开头添加(package-initialize)完成了这项工作.谢谢. (2认同)