15

我想在同一台电脑上的同一用户帐户上同时维护多个 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 的值,但不会从中加载文件

4

6 回答 6

6

我会尝试类似的东西

emacs -q --eval '(load-file "~/.emacs1.d/init.el")'

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

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

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

于 2013-07-05T08:08:47.213 回答
5

如果你想从控制台调用东西,我会把它放在 .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

您甚至可以在 $ 符号之后完成 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.

于 2013-07-08T17:34:57.660 回答
4

或者,您可以使用单个 ~/.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")))
于 2013-07-05T14:15:56.347 回答
3

chemacs是一个管理多个 Emacs 配置的软件。请参阅https://github.com/plexus/chemacs

于 2019-02-04T02:03:46.140 回答
2
  • 为您的 Emacs 配置文件创建新文件夹 - 例如/home/user/.emacs.d.vanilla
  • 在其中创建init.el并复制以下两行。这些行将告诉 Emacs 将 newinit.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 新的初始化文件夹和初始化文件位置的特别文件。
于 2019-06-22T14:07:25.763 回答
1

作为nik回答的延伸,以及他们在这里的评论,这就是我所做的,最后:

;;; -*- lexical-binding: t -*-
;;
;; Added to appease the package.el gods
;; (package-initialize)

;; Select the profile based on which command-line argument used

(defvar *emacs-config-switcher/profiles-alist* nil
  "An alist for the profiles that are registered here")

(defun emacs-config-switcher/register-profile (key path &optional file)
  "Register profiles to global variable, referenced by KEY.

PATH points to the directory where the profile is stored. By default, will use init.el,
but it can be specified using FILE."
  (or file (setq file "init.el"))
  (setq *emacs-config-switcher/profiles-alist* (cons (cons key (list
                                                                :directory (file-name-as-directory path)
                                                                :file (expand-file-name file path)))
                                                *emacs-config-switcher/profiles-alist*)))

(defun emacs-config-switcher/load-profile (switch)
  "Load profile based on key."
  (let ((key (pop command-line-args-left)))
    (if (assoc key *emacs-config-switcher/profiles-alist*)
    (progn (let ((directory-path
              (plist-get (cdr (assoc key *emacs-config-switcher/profiles-alist*)) :directory))
             (init-file
              (plist-get (cdr (assoc key *emacs-config-switcher/profiles-alist*)) :file)))
         (setq user-emacs-directory directory-path)
         (load init-file)))
      (error "Profile %s does not exist." key))))

; Register profiles here

(emacs-config-switcher/register-profile "emacs-starter-kit" "~/emacs-profiles/emacs24-starter-kit")
(emacs-config-switcher/register-profile "spacemacs" "~/emacs-profiles/spacemacs")

; Add the custom switches

(add-to-list 'command-switch-alist '("-S" . emacs-config-switcher/load-profile))
(add-to-list 'command-switch-alist '("--startup" . emacs-config-switcher/load-profile))

;;; init.el ends here

我注意到的一件事是,如果您使用的是spacemacs之类的东西,它会失败,因为它正在寻找的不是load-path而是user-emacs-directory。此外,将load-path文件放入 spacemacs 文件夹会使 Emacs 抱怨load-path有您的.emacs.d文件,这会导致问题。

事实上,这适用于spacemacsemacs-starter-kit。没有尝试任何其他配置,但我可能会开始研究。

于 2018-04-27T08:50:29.537 回答