面向产品经理的Emacs教程:33. Emacs升级插件

· 1205字 · 3分钟

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

你也可以在 这里 查看最新的配置文件。