在 doom-emacs 升级不兼容后,再次讨论 emacs 的配置

起因是我更新了自己的package 【插件】org-annot-bridge PDF笔记 ⇌ org-mode - #4,来自 hongfei6 ,所以需要 doom sync 一下,然后悲剧就来了:

  • 我长期没有更新doom,版本固定在 [2024-07-21] 的 f5b395833,结果这次再用报错

    Message: Could not find package git-commit. Updating recipe repositories: (org-elpa melpa nongnu-elpa gnu-elpa-mirror el-get emacsmirror-mirror) with ‘straight-pull-recipe-repositories’ may fix this

  • doom up 到 [2025-03-17] 7bfde4e 很顺利,然而再用的时候发现,我原先的所有跟 cite 的功能都失效找不到条目了!所有的helm-bibtex、org-ref等都失效了,而我的笔记又很依赖 cite,感觉是底层的 parsebib 变动的原因,但是还没有定位到具体原因
  • 所以现在就很痛苦,又退不回原来的(因为不再能更新,尝试重新install旧版本也会报错),新版本要前进就要解决bug,bug又不太好解决……

因为 vanilla 不那么开箱即用,doom-emacs这样的starter就感觉很有吸引力了。我觉得一来社区配置本身也是很好的学习资源,二来它能让你花更少时间配置,更多时间工作,最后,我自己很难手配到它的程度,就很开心地投奔doom-emacs了。

但是不得不说,使用第三方配置后有些奇怪的 bug 后,理解起来的成本也是大大增加,一是第三方配置本身的封装机制,二是自己在此之上的hack。所以总归核心的如何管理复杂度。

大家是怎么看待这个事情的呢?

1 个赞

早该放弃了,每次doom emacs 用户来寻求帮助都是安装和升级相关的问题。

3 个赞

我也是从 doom 转到自己的配置的。这件事情并不难,自己配不可能配到 doom 这么好用也是不对的。自己的配置肯定最合自己的手。

主要问题就是这个是比较花时间的,建议找一个小长假(三天时间)专心搞这个事情。

重写自己的配置优先配自动补全框架,minibuffer 补全框架,还有 evil (你用 doom 假设你用 evil)这三个是最花时间的。配这三个东西可以直接去抄 doom 的源代码,doom 的一些封装抽象的东西不用抄,把一些和插件有关的配置项和 advica 抄过来就好了。

doom 整体的结构框架还是复杂的,但是具体到每一个插件上的配置倒是还好,抄一下并没有很复杂。

如果你把这三个东西配好了,那么你就有一个基本上可以自己用的配置了,你就可以实现自举,不依赖 doom,用自己的配置去优化自己的配置了。

作为从 doom 迁移的人,想要配置类似 doom 风格的快捷键,还有配置 leader key 等快捷键需要学一下 general 怎么用,doom 的 map!宏就是基于 general 包装的,自己的配置就没必要做二次包装了,直接调用 general 就好了。

还有一个就是窗口管理。doom 是自己写了一套封装的框架 set-popup-rules 来定义不同插件的不同 buffer window 的显示方式。我觉得没必要。学一下怎么用 display-buffer-alist 就行了。

3 个赞

这是我的使用经验,目前能解决类似的问题

可以尽可能只用 doom core ,即减少 init 中启用的数量,其余配置参考着自行写在 config 里面,或者写自己 的 private module 。

我是从自己的配置中转过去的,主要是想偷懒,有个人帮忙优化还是挺舒服的,现在升级前就要看看 commit 信息。

对于你现在这种情况,可以自建一个 private module,把之前 commit 的 org module 放进去,应该可以解决。

之前也是因为更新问题,从doom迁到自己配置的,我是跟着子龙山人的教程搭建了补全以及minibuffer相关,需要开发语言的相关包,就去doom里面抄 :rofl:

越个性化的东西越要掌握在自己手中,所以,使用emacs几年后,建议从头搭建自己的配置

感谢大家的建议!在遇到困难的时候看到大家的留言心里感觉暖暖的~

其实,我是从没有doom的时候就开始用emacs了,主要是用来进行知识管理,elisp了解得不多,有了doom之后感觉三方帮自己优化配置也挺好,但是现在可能需要重新思考这个问题了。

另外一点是,一直有朋友想让我介绍怎么用emacs进行知识管理,但是我一直没想好用什么样的框架介绍。对于新手来说vanilla真的有点劝退,而且要花很多时间介绍emacs的配置。但是这其实跟知识管理关系不大,我更想有一个基本可用的工具,然后专注讲跟知识管理更相关的一些话题。

我本来期待doom-emacs可以充当这个底层的工具,但是长期用起来感觉稳定性确实有些问题。

@ymfsing 给了我思路:

我现在的想法是: 给初学者的教程,还是先上doom-emacs,而不是vanilla。但是尽可能只用 core 和核心的module,一开始的重点不应该太多放在elisp上,应该尽快地让用户熟悉概念和功能:

  • window和buffer(多开窗口和临时buffer是我觉得非常有用而且其他软件做得不如emacs的地方)
  • 大纲的操作(全键盘在大纲之间跳转和搜索是我无法离开org-mode的重要原因)
  • 搜索(org没有原生的笔记库内的搜索工具,但是helm-org-rifle胜过99%的笔记搜索,而且未来结合llm的语义搜索可期,虽然我觉得在个人知识库中,语义搜索的必要性不如企业知识库)
  • 链接(id链接的快速插入是建立相关联的知识库的核心,而且正是链接的高度自定义使得org-media-note这样的插件得以快速实现)
  • 版本管理(对知识管理很重要,但是经常被忽视的一点,对于emacs更是不可缺少的一环)
  • 我觉得以上是知识管理中比较核心的,接下来就是锦上添花的:capture、property、agenda、block,以及各种相关插件 :快捷输入(补全和snippet)、公式编辑、文献管理、视频笔记等

这些都了解了,自定义复杂度估计也上来了,在使用过程中也应该渐渐熟悉elisp了。这时候可以再逐步在doom的基础上:给已有function加advice、给已有hook加function,自己写function、自建module …… 慢慢把主动权从doom移到自己手里,甚至可以抛开doom,另起炉灶。

就像 @ematemp 说的

就像我曾经在 构建可持续发展的个人工作流 01:认识篇 - 少数派 里写的, Emacs Org-mode 不适合作为个人上手的第一个知识管理方案,更适合作为第二个进阶方案。或许 doom-emacs 的定位更像是「第一个」方案,但是第二个方案应该是 「doom-emacs」+自定义,或者完全的自定义。即便是完全的自定义,doom-emacs在第一个阶段也起应该到了正向的引路作用。

我准备以此契机,自己先实践一下这个思路是否可行。可行的话,我就准备按照这个框架给没有接触过emacs的beginner写一个「面向文字工作者的 Emacs Org-mode 教程」啦。

再次感谢大家!

我总结一下doom emacs经常出现的问题:

  • doom 更新导致的
    • 新的配置代码与自定义不兼容
    • 新版本的插件与旧的配置不兼容
    • 一些插件被移除,需要手动安装
  • 另外,就算 doom 没有变,但是 MELPA 等ELPA 仓库更新好像也会造成doom使用的问题

大家还有补充吗?

我其实用的是原生emacs快捷键,不是evil 哈哈

我现在有个问题,不用doom之后,package是怎么安装管理的?还是用straight么?

我自己是在 GitHub - a-schaefers/spartan-emacs: Finally, a simple Emacs framework 这个基础上改的,包管理它用的straight,它的好处在于我压根不用管那些配置中产生的垃圾文件,只关注自己的那点配置就好了,而且它代码也简单。你也可以尝试用GitHub - jamescherti/minimal-emacs.d: minimal-emacs.d - Starter-Kit with Better Emacs Defaults and Faster Startup 这个,文档全,初始就一个包管理。另外,你大可以用 emacs --init-directory ~/.minimal-emacs.d 的方式一点点搬运自己的配置。

1 个赞

你用 emacs 按键的话,推荐使用 centaur emacs ,一个一个的启用。

我用emacs传统的package.el, 用到的包时不时用 GitHub - redguardtoo/elpa-mirror: Create local emacs package repository. 15 seconds to install 115 packages. 备份并上传到github的 GitHub - redguardtoo/myelpa: Mirror of Emacs packages I'm using 里去。

接下来就很简单了,把emacs.d和myelpa肯定兼容的版本打上同样的版本号(如1.3, 1.4 …)就行了。

这样我随时可以回滚到老版本的配置和老版本的包,见 GitHub - redguardtoo/emacs.d: Fast and robust Emacs setup. ,还支持emacs23

1 个赞

我现在有个问题,不用doom之后,package是怎么安装管理的?还是用straight么?

我依然继续使用 straight。主要原因是因为 straight 有 lockfile 支持。lockfile 是我个人认为最好的支持版本回滚的方式。doom 锁版本的选择方案是自己手动维护插件的 git commit hash 版本,而不是使用 straight 的自动维护 lockfile 的方案,当然它选择这个方案肯定是有自己的原因,但是我个人认为这个选择并不好。

当然 lockfile 不是版本回滚的唯一方案,也有别的方案。哪怕不用版本回滚,其实通常装包也不太容易出问题,仅使用系统自带的 package.el + package-vc 通常也足够用了,这个看个人选择了。

已经在用自己的配置,和自己开发的包来解决日常使用的小问题。

其实 Emacs 内置库很多也相当好用,但补全的表现一直很一般。

DOOM V3.0 迟迟没有出来。实在等不了了,自己攒了个配置。 elpaca+setup.el 来作包管理和配置分块。参考了Radian 和 doom 的配置。

doom配置是挺好,设计全面合理,满足了社区的众多需求,但是很多配置自己用不到,也搞不懂。

2 个赞

我是 spacemacs 的用户,之前也是某次更新后,lsp-bridge 不能用了,即便尝试了最小配置也无法。只好先弃用 lsp-bridge ,然后慢慢攒个配置。

我还是个小白,可能要花很久很久的时间才能完成。但只能慢慢来了… :joy:

因为最近的一些体验,一个配置好vertico三件套等补全检索+符合审美的主题+中文字体的emacs配置对只用orgmode的我来说,已经足够,denote ebib等包文档非常完备,自己就算是不会elisp也可以阅读复制粘贴 :rofl:或者询问ai。

我也觉得llm很利好elisp这种轻量功能代码,而且代码之间不太耦合。现在比以前用emacs还是轻松不少😄

我历史包袱有点重,之前就是package太多,又不太会优化,doom的机制对性能提升就迁到doom了。

对了,我在vertico上一直没有找到能替代helm-org-rifle的插件,你在啊笔记库里的搜索用的是什么?

搜索内容关键字使用 rg。搜索文件附件使用 consult-find.

我使用 denote 管理笔记,有一个denote-search 包。