【分享】emacs多个配置共存的思路

为啥我会有这种使用需求?因为我目前在完善自己的emacs配置,在这个过程中不可避免的需要参考社区比较成熟的配置效果,如doom, spacemacs等。

第一种方向, 使用chemacs2, 开源社区贡献的多个配置共存的实现,我试了一下,挺好用的, 它主要的思路是在home目录加入一个配置文件: ~/.emacs-profiles.el, 内容实例:

(("default" . ((user-emacs-directory . "~/.emacs.default")))
 ("spacemacs" . ((user-emacs-directory . "~/spacemacs")))
 ("prelude" . ((user-emacs-directory . "~/prelude"))))

直接启动emacs的话,默认加载default配置, 也可以通过执行如:emacs --with-profile spacemacs 来启动spacemacs; 它还支持配置环境变量,因为不是我的需求, 未做深入研究!
其他人如果有兴趣的话,可以去具体看它的readme.

第二种,如果使用的是emacs 29.1版本的话,可以使用emacs新添加的启动参数:–init-directory来实现. 具体操作是,新建多个脚本文件来分别启动不同配置的emacs,我目前使用了两种配置,分别是我自己的配置及doom-emacs,假设名字叫robin-emacs, 那我就可以在我的系统可识别的path下面新建一个robin-emacs脚本文件, 内容: emacs --init-directory="我自己的配置文件路径", Linux/MacOS下面可能还需要给这个文件加可执行权限, 之后就可以从终端输入robin-emacs来直接启动使用了我自己配置的emacs, doom-emacs同理!

这里提供了解决这个问题的两种思路, 欢迎指正! 欢迎讨论!

1 个赞

有点小问题. 即使换了 init-directory, 有些插件还是默认往 ~/ 下塞东西. 这个必须得把所有涉及配置文件保存的变量都手动改成以 user-emacs-directory 开头.


我在自己电脑上为了多份配置共存, 都是直接新建专门供我使用Emacs的账户. (还有更简单直接的办法吗?

我通常会使用软链接(包括我自己的配置),需要测试其它配置就简单粗暴的

rm .emacs.d
ln -s xxx/spacemacs .emacs.d

软链接也是个思路,我现在用我自己的配置的时候也是用的软链接,无论是在windows还是linux上。就一样,如果切换比较频繁的话,会比较烦;如果只是偶尔切换,那还ok

你这个思路太清奇了!!!赞一个

至于这个, 我初始化doom-emacs的时候确实碰到了你提到的问题, 本来doom是在其他位置的,但是初始化完成之后,它竟然在我的~/.emacs.d下面加了一些东西,实在有够艹蛋的。目前我才开始用chemacs2, 我觉得像这种专业的init directory picker应该不会有这种问题。

使用emacs的-Q和-l选项,-Q禁止默认加载,-l指定加载入口,为每种配置设定不同的入口,内部再去require其他模块的配置,甚至不同配置还可以有些共用的文件,如安装的插件等。

再为不同的配置emacs分别定义alias再启动即可。

1 个赞

一个配置建一个branch不行吗

1 个赞

用linux,直接配置HOME环境变量:

spacemacs.sh

export HOME=/home/project/emacs/spacemacs
emacs

centaur.sh

export HOME=/home/project/emacs/centaur
emacs

想要多少不同配置都可以,而且可以同时运行。

意思说, 可以, 开 2个 或以上的 emacs? 各个进程, 都是独立的?

我当前也在整理, 当前用的 笨办法, 但是也最实用

物理隔离 用 2台电脑 :innocent:

一台 编写新的配置, 一台 测试配置效果

这个思路,如果有配置是来自github,比方说spacemacs或者doom-emacs,类似这种的话,怎么同步呢?

是的, HOME变量是emacs用来寻找配置文件的,配置成不同的值,emacs就会去不同的路径寻找配置文件,这样就可以多开emacs了。 这个功能是Linux系统的功能,与emacs无关。

ps: emacs server应该无法支持。 ps2: 我没有windows,不知道windows下怎么弄,我只在linux下这样用过。