emacs 24之后的版本内置了 elpa 包管理功能,下面我来介绍如何使用 elpa 的包管理功能来方便的安装插件。
有一点得提前说明:我使用的完全是 陈斌的配置,所以以下也是在其原有结构上实现的。
文章目录
寻找并下载插件
我们打开 emacs 后使用 M-x list-packages
函数就可以列出所有可以安装的第三方包了。
然后我们可以使用 C-s
来搜索我们想要的插件。这里我以 org-download
为例,该插件是一个方便 org-mode
插入图片的插件,有了它我们就可以很方便的在编辑过程中将图片加入到我们的 org文件 中了。
具体下载过程不是本文重点,不再赘述。
配置插件
下载完插件后,我们可以在 ~\.emacs.d\elpa
目录下找到我们刚刚下载好的插件 org-download
。当然,只是这样还是不够的,我们还要继续做一些更加具体的配置才能让 emacs 启动时加载该插件。
打开 ~\.emacs.d\lisp\init-elpa.el
打开后,我们需要在 (provide 'init-elpa)
前面加上 (require-package 'org-download)
新建 init-auto-complete.el
我们需要在 ~\.emacs.d\lisp
下新建一个叫做 init-auto-complete.el
的文件,然后在里面写上:
(require 'org-download)
(provide 'init-org-download)
至于第一句 (require 'org-download)
这句是要根据插件本身提供的接口来写:
- 打开我们刚刚下载到
~\.emacs.d\elpa\org-download-0.1.0
目录。 - 我是在 Windows 下使的,但是安装了
Cygwin
来提供 Unxi/Linux 的命令。所以我在该文件夹下打开命令窗口使用grep -nr "provide"
看看有提供什么接口。
- 这里看到
org-download.el
这个文件给我们提供了一个叫做org-download
的接口,所以我们才写了那个第一句。
加载配置文件
最后,我们只需要在 ~\.emacs.d\init-elpa.el
文件中添加一行 (require-init 'init-org-download)
即可。
个人理解
Directory structure
~/.emacs.d/init.el
is the main file. It includes all the other *.el files
~/.emacs.d/lisp/init-elpa.el
defines what packages will be installed from MELPA
Packages are installed into~/.emacs.d/elpa/
I also manually download and extract some packages into
~/.emacs.d/site-lisp/.
Packages in~/.emacs.d/site-lisp/
are not visible to the package manager
My own snippets is at~/.emacs.d/snippets
.
上面这段话出自 https://github.com/redguardtoo/emacs.d#directory-structure
以下纯粹是个人的理解,可能会有失偏颇或者错误之处,欢迎大家指正批评。
Emacs 加载配置文件的时候应该先是找到 ~/.emacs.d/init.el
,再根据 (require-init 'init-elpa)
这句找到 ~/.emacs.d/lisp/init-elpa.el
。然后执行 init-elpa.el
里的很多 require-package
。执行完这些后,再执行 init.el
里的 require-init
,也就是执行 ~/.emacs.d/lisp/
目录下的除了 init-elpa.el
外的其他文件。
对于为什么这么样划分,我在 EmacsWiki 上看到的解释是:
It’s often better to break up a lengthy init file into a number of EmacsLisp libraries and a small, top-level init file that loads those libraries, especially if you define commands and other functions. Some of the init files posted on EmacsWiki are organized in this way, as a set of library files.
由于自己对 git 还不是太了解,我现在有个问题是如何保证能同步更新陈斌的配置的同时保留自己的配置,希望有热心网友能指点一下。
参考文献
本文其实只是对 https://blog.csdn.net/vv_vv_vv/article/details/52992985
这篇文章的一点补充。