今天尝试清理配置文件,感觉如同清扫一台年久荒废的机器

我的配置本来是用org整理的,在 init.el里面加入 (org-babel-load-file "~/.emacs.d/config.org") 就可以直接剥离加载 config.org 里面的elisp代码,之前开始用这种方式的时候感觉挺方便挺整洁,配置也容易分类查找,结果今天开始清理更新配置文件,各种重复的代码,听都没听说过的插件,完全不记得自己为什么设置了的快捷键,以及当初刚开始用emacs的时候乱设的十来个global-set-key

最严重的问题就是插件设置过于分散,这边一个require加七八行setq, 那边一块use-package, 快捷键设置重复甚至矛盾,最严重的一个函数总共设置了三个快捷键…想想自己的emacs每天还能如同奇迹一般正常启动稳定工作实在是五味杂陈…

整理到一半实在整理不动了,过来问问大家有没有什么整理init.elinit.org 的好方法,把各种代码都按照一种规则分门别类整理好,以供未来修改或添加的时候既具效率又不失灵活性。或者也可以贴一下自己配置文件的整理架构。

1 个赞

帮顶+围观 我刚开始用 Emacs,还没有攒自己的屎山 :rofl:

4 个赞

参考purcell配置,每一个文件都对应一个插件的配置,
init.el … 集成所有需要的包以及需要对应的配置
其中,elpa-27.2文件夹储存具体的elpa包 lisp文件夹储存purcell对他们的配置
(注意,如果个人在lisp文件夹编写了init-local.el 那么也会被加载进入 purcell配置以此实现了个人自定义拓展)

我个人是分成这几类(也是加载顺序)

  1. 必要:无论如何都要加载,emacs -Q 时都能load而不出问题(包括 straight 和一些gc之类的基本配置

  2. 自定义内容:包括自己写的函数,mode,通用快捷键,window 之类的

  3. 正常使用时必然加载:consult,embark,avy,flycheck 这些

  4. 额外内容:可有可无,一些美化,去掉也不影响正常使用

  5. 所有的外观,主题,mode-line 一类

  6. emacs app(像什么 emacs rime,magit ,vterm 一类)

  7. 各种语言 mode (包括 org)

  8. 库 (dash,all-the-icons 之类)

  9. 其余可以直接 straight-use-package xxx 就不用管的包

11 个赞

我用straight + leaf。

  • 一个功能的配置尽可能包含在一个leaf块当中
  • 包分为核心包和非核心包。核心包一定会加载,非核心包可选择性加载相应的配置。
  • 做了个--mini的自定义命令参数,加载最少的功能。确保配置出问题时,至少可以启动Emacs去修改。
  • autoload文件单独存放,调用时再自动加载。
  • lisp文件夹下存放拆分的配置文件。
  • contrib文件夹下是自己hack的一些package,用straight加载。
  • 通用工具宏在 library.el 中。
  • Radian(straight.el作者的配置) 的做法,主配配置和自己的local配置,在编译时全部编译成一个文件加载。

不过论最简洁清晰的结构还是 purcell 的配置,doom的黑魔法太多。 也可以参考下Modus-theme作者的配置结构也算比较清晰。

3 个赞

org文件中写配置,我原来用了很长时间,但是启动速度太慢了,每次改了org文件,会自动扫描重新提取里面的lisp配置代码,启动就更慢了,不如直接在lisp文件中配置了。

我也是org管理的,不过每个插件都标注下是为啥加进来的。。。感觉还可以

2 个赞

如果用 use-package 的话,感觉放在一个 init.el 文件就够了,use-packge 这个包的目的就是用来管理配置文件的,修改配置的时候通过 isearch,consult-imenu,或者 consult-line 就可以快速导航到 init.el 文件的各个位置。

配置切的很碎的话,在 Windows 系统下会明显增加启动时间,在 Linux 和 macOS 没那么明显。

包的安装可以选择 package.el,straight 或者 git submodule(我用 borg实现半手动)

2 个赞

所以我用doom,自己没力气去清用社区清好的,自己只负责一点点不同的部分就好了 :grinning:

2 个赞

以前有用过 org-mode 组织配置,不过那个时候感觉用的很呆,最后发现不如直接写 el 方便。 最近有了些新的想法。

  1. org-mode 里面可以用 M-; 去 comment 整个 section,然后 tangle 的时候就忽略了。用这个方式在多个方案中选择很方便。
  2. 配置应该高度模块化,比如说第一级的 section 是分类的话,那么第二级就是模块。每个模块应该都可以随意的去除,不影响其它部分。比如说去掉 meow 就只是把 editor 里面的 Meow 这个 section 去掉。

微服务在Emacs(笑)
不过话说回来了,有些模块实在是无法微服务化,比如company(因为它本身就是对模块的集成)
牵一发而动全身(叹气)

不会啊,你看我的配置里面 company 就是一个独立的 section 就搞定了。 https://github.com/DogLooksGood/meomacs/blob/master/editor.org#company

如果你把这个 section comment 掉,所有的补全就会回到内置的 completion-at-point. 其它所有的地方,都和 company 是无关的。实际上这套配置里面,每一个模块都可以独立的加减。

1 个赞

多谢指教,长见识了. :smiley: :smiley: :smiley:

用use-package的话,尽量多用use-packge,把相关配置尽量放到同一个use-package代码块里面,use-package的keyword非常多,,如果你以后要lazy-load配置,对配置加载顺序还是很敏感的,用use-package可以方便debug;就算不用use-package,手动去require,with-eval-after-load,写autoload,也建议这样。

2 个赞

这个情况从头配还省事点(顺便还能试试最近比较流行的新插件

我是核心用的包,函数都放在 core/core-xx.el里直接加载。 然后其他不重要的包的配置都放在lisp/pkg-xx.el(xx用包名替代),在这个文件里写文档,配置,require该包,做好 autoload。 然后init.el里写

(straight-use-package
 `(my-lisp-autoload
   :local-repo "~/.emacs.d/lisp/"
   :build (autoloads)
   :files ("pkg*.el")
   ))

我也是这样的想法,但是有些时候不知道具体该如何实现:

假设我同时使用Python和C,分别配置了python.elcc.el;接下来写了两个钩子,利用eglot分别调用pyls和ccls,那么钩子相应的代码同时放到eglot.el,还是前述两个文件呢?

请问狗哥的处理逻辑是什么?

很多方式,比如说在 python.el 做 eglot 的 with-eval-after-load.

我的意思是说,这部分配置及代码,要不要形成一个单独的文件,及其组织架构的逻辑。具体有哪些想法?不是强调实现的方法 :rofl:

我觉得没有意义,越平的结构越好。

4 个赞