同时维护多个emacs配置

时间:2013-07-05 07:41:26

标签: emacs elisp

我想在同一台PC上的同一用户帐户上同时维护多个emacs配置,例如emacs-prelude,emacs-starter-kit和我自己的自定义emacs配置。
因为我有安装目录,如.emacs1.d,.emacs2.d,.emacs3.d。

每个emacs用户目录都有一个init.el文件,应该在启动时加载。而不是.emacs文件,我更喜欢使用init.el文件。

如何加载这些自定义配置目录?

我尝试了emacs --eval '(setq user-emacs-directory "~/.emacs1.d/")'

它只设置user-emacs-directory的值,但不从中加载文件

7 个答案:

答案 0 :(得分:6)

我会尝试像

这样的东西
emacs -q --eval '(load-file "~/.emacs1.d/init.el")'

然后你会在init.el文件的开头做一些事情:

(setq user-emacs-directory "~/.emacs1.d/")

(或者您也可以将两者都作为命令行参数进行评估)

答案 1 :(得分:2)

或者,您可以使用单个〜/ .emacs或init.el文件,并选择要加载的配置目录。

(defvar *emacs-prelude-enabled* t)
(defvar *emacs-starter-enabled* nil)
(defvar *other-config-enabled* nil)

(cond (*emacs-prelude-enabled* 
       (add-to-list 'load-path "~/.emacs1.d/")
       (load "~/.emacs1.d/init.el"))
      (*emacs-starter-enabled* 
       (add-to-list 'load-path "~/.emacs2.d/")
       (load "~/.emacs2.d/init.el"))
      (*other-config-enabled*
       (add-to-list 'load-path "~/.emacs3.d/")
       (load "~/.emacs3.d/init.el")))

答案 2 :(得分:2)

如果你想从控制台调用一些东西,我会把它放在.bashrc:

export emacs1=~/.emacs1.d/init.el
export emacs2=~/.emacs2.d/init.el
export emacs3=~/.emacs3.d/init.el

然后像这样调用它们:

emacs -q -l $emacs1
emacs -q -l $emacs2
emacs -q -l $emacs3

你甚至可以在$ sign后用bash完成。

你甚至可以为这些东西添加别名:

alias emacs1='emacs -q -l ~/.emacs1.d/init.el'
alias emacs2='emacs -q -l ~/.emacs2.d/init.el'
alias emacs3='emacs -q -l ~/.emacs3.d/init.el'

然后像这样调用它们:

emacs1
emacs2
emacs3

当然,

(setq user-emacs-directory "~/.emacs1.d/")

仍然必须在每个init.el

答案 3 :(得分:1)

作为enter image description herenik及其评论answer的延伸,最后我做了以下事情:

load-path

我注意到的一件事是,如果您使用here这样的内容,它会失败,因为它所寻找的不是user-emacs-directory而是load-path。此外,将load-path放入spacemacs文件夹会使Emacs抱怨.emacs.dMomentDateAdapter个文件,这会导致问题。

实际上,这适用于spacemacsspacemacs。没有尝试过任何其他配置,但我可能会开始研究它。

答案 4 :(得分:1)

  • 为您的Emacs个人资料创建新文件夹-例如/home/user/.emacs.d.vanilla
  • 在其中创建init.el,并在其中复制以下两行。这些行将告诉Emacs将新的init.el视为主要配置文件,并将其文件夹视为主要配置文件夹:
(setq user-init-file (or load-file-name (buffer-file-name)))
(setq user-emacs-directory (file-name-directory user-init-file))

现在像这样启动emacs:

emacs -q -l /home/user/.emacs.d.vanilla/init.el
  • -q-跳过默认的~/.emacs.d/init.el
  • -l-加载特殊的init.el,该信息告诉Emacs新的init文件夹和init文件的位置。

答案 5 :(得分:0)

chemacs是一款用于管理多个Emacs配置的软件。参见https://github.com/plexus/chemacs

答案 6 :(得分:0)

从几种配置中选择符号链接可能很棒。参见https://stackoverflow.com/a/21568966/5128179