1 课程回顾 🔗
通过上节课,我们了解了如何通过 Emacs 来管理简历,以后的个人简历只需要修改 Org 文件就可以了,只需要关心内容,不需要关心格式,文本即一切!
今天我们来学习如何升级 Emacs 的插件,以及如何解决升级过程中出现的问题。
2 概述 🔗
Emacs 的各种插件(package)丰富多样,功能越来越强大和完善,对于插件的升级,相信很多人都有一个烦恼:升级了插件,怕之前的配置不兼容了,不升级插件吧,可能新版插件提升了性能,增加了很多新的功能,一个字——纠结!
因此升级插件和将插件保持在一个稳定的版本,是一个平衡,看自己的需要,以及自己的性格。就我个人而言,我比较倾向于使用较新版的插件,体验新的功能。
那升级插件,有好几种方式:
- 通过
auto-package-update.el
插件来实现全部插件的定时自动升级 - 通过
package-menu-filter-upgradable
命令手动对某些包升级 - 隔一段时间,删除
elpa
目录,再重新启动 Emacs,Emacs 会自动安装最新版的插件
就我个人而言,我倾向于删除 elpa
目录的方式,简单粗暴。
3 auto-package-update.el 插件 🔗
我们可以通过 auto-package-update.el 插件实现对所有插件的定时全量自动更新。
我们只需要将如下配置添加到我们的配置文件即可:
(use-package auto-package-update
:ensure t
:hook (after-init . auto-package-update-maybe)
:if (not (daemonp))
:custom
(auto-package-update-interval 30) ; 每30天检查一次
(auto-package-update-prompt-before-update t) ; 升级前提示
(auto-package-update-delete-old-versions t) ; 删除旧版本
(auto-package-update-hide-results t))
4 package-menu-filter-upgradable 命令 🔗
我们通过 list-packages
界面下,执行 package-menu-filter-upgradable
(/ u
) 命令查看当前哪些包可以升级:
这张图展示了所有可以升级的包列表:
这张图展示了已经安装了包列表:
此时将光标移动到想要升级的包那一行,按下 i
键标记要升级的包,按下 x
执行即可:
5 删除 elpa 文件夹重新安装 🔗
下面我们来学习另外一种更加粗暴的方式,把 .emacs.d
文件夹下的 elpa
文件夹(装所有插件的文件夹)全部删除,此时重新启动 Emacs 时,Emacs 会自动下载最新版的插件包。
自从我开始做这个系列,已经过了接近一年了,很多插件都没更新,现在一口气更新所有的插件,我们尝试解决插件更新后的配置调整问题。
在实际测试后,发现升级了包后并没有发现冲突,于是我改了下
cape
这个包的配置,用来进行演示。
5.1 删除 elpa 文件夹再重新启动 🔗
为了安全,建议不要直接删除,可以使用 mv elpa elpa.bak
命令将文件夹重命名,这样万一出现意外,我们随时可以恢复。
我们删除/重命名完 elpa
文件夹后,再次启动 Emacs,可以看到,Emacs 报了以下的错误:
我们可以看到 cape-super-capf
这个函数名的定义出了问题,进一步地,我们可以通过在启动 Emacs 的时候添加 --debug-init
的参数,来获得具体出错的 backtrace 信息。
知道了这个错误,我们可以查看 cape
这个包的相关网站(主要是 Github 首页以及相关的 issue),通过搜索,我们看到,这位大神把 cape-super-capf
这个函数名,改成了 cape-capf-super
,因此我们要做的就是修改这个变量名,然后重启 Emacs,至此,我们成功修复了该问题:
6 结语 🔗
通过今天的学习,我们了解了如何升级各种插件包,我们可以通过 --debug-init
的方法来尝试找到各种启动问题,然后逐个解决。
这节课的配置文件的快照见:emacs-config-l33.org
你也可以在 这里 查看最新的配置文件。