使用 ELPA 管理 Emacs 扩展包

Table of Contents

Emacs24 中集成了包管理器,叫做 ELPA(Emacs Lisp Package Archive),便于管理 Emacs Lisp 开发的扩展程序。

1. 列出可用的包

执行:

M-x package-list-packages

ELPA 会列出所有可用的包:

  • 已安装的包
  • 未安装的包,ELPA 会自动从软件源服务器上获得最新的可安装包列表
  • Emacs 内置的包

2. 设置源

默认源中的可安装包比较少,EPLA 支持设置多个源,在初始脚本(~/.emacs 或 ~/.emacs.d/init.el)中加入:

(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                         ("marmalade" . "http://marmalade-repo.org/packages/")
                         ("melpa" . "http://melpa.milkbox.net/packages/")
                         ("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")
                         ("elpy" .
"http://jorgenschaefer.github.io/packages/")))

再执行 package-list-packages 命令时,会自动从这些列表中更新。但是每次执行 package-list-packages 都会从这些源中逐一获得最新列表,获取速度取决于网络,通常会比较慢,所以可以将列表内容保存到本地:

M-x package-refresh-contents

配合 package-list-packages-no-fetch 便可马上列出上次保存的列表

3. 安装和删除

在包列表中使用 C-s 或 C-r 搜索某个包,然后把光标移动到你要安装的包所在行,可以使用以下快捷键管理包:

  • i,将包标记为“安装”
  • d,将包标记为“删除”

然后按“x”对标记的包执行操作,按“u”可以取消对某个包的标记。

安装包还可以执行:

M-x package-install

输入要安装的包(可自动补全)后回车。包会安装在 ~/.emacs.d/elpa 目录中。

4. 包升级

执行:

M-x package-menu-mark-upgrades

升级就是将旧的包标记为删除,新的包标记为安装,所以在升级前,需要先更新列表:

M-x package-refresh-contents

5. ELPA 初始化

Emacs 启动时会自动加载 ELPA 安装的包,但一定要注意初始化的顺序,Emacs 首先加载初始化文件(~/.emacs 或 ~/.emacs.d/init.el),然后再加载 ELPA,如果要在 ~/.emacs 中配置某些通过 ELPA 安装的包,就一定要先让 ELPA 加载,否则会出错。

通常会在 ~/.emacs 或 ~/.emacs.d/init.el 加入这两句:

(setq package-enable-at-startup nil)
(package-initialize)

意思是手动加载 EPLA,package-enable-at-startup 的值决定了 Emacs 启动后是否自动加载 ELPA,默认为 t,这里将它设置为 nil,Emacs 启动后不会加载 ELPA。调用 package-initialize 是为了手动加载 ELPA。

6. 帮助

  • 安装包时提示:“emacs-24.1' is unavailable”

如果当前使用的 Emacs 版本是 24.x,可能因为以前在老版本中手动安装过包管理器而导致的冲突。删除旧的包管理器文件 ~/.emacs.d/package.el 即可。

7. 更多参考