2013-07-05 62 views
13

我想在同一臺PC上的同一用戶帳戶上同時維護多個emacs配置,例如emacs-prelude,emacs-starter-kit和我自己的自定義emacs配置。
因爲我有安裝目錄像.emacs1.d,.emacs2.d,.emacs3.d。同時維護多個emacs配置

每個emacs用戶目錄都有一個init.el文件,該文件應該在啓動時加載。我更喜歡使用init.el文件,而不是.emacs文件。

如何加載這些自定義配置目錄?

我試圖運行emacs --eval '(setq user-emacs-directory "~/.emacs1.d/")'

它只是將用戶的Emacs目錄的值,但不會從它

+0

出於好奇:你需要什麼,'emacs-starter-kit'例如不能提供? –

回答

6

我會嘗試像

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

,然後加載文件你可以在你的init.el文件的開頭做類似的事情:

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

(或者你也可以將這兩件事情作爲命令行參數來評估)

+1

我只是試着這樣做,所以我可以同時使用'〜/ .emacs.d /'我已經配置好自己和emacs-for-clojure。它讓我意識到了一個潛在的問題,那就是在某些地方硬編碼「〜/ .emacs.d/foobar.el」的配置文件,忽略你對user-emacs-directory的改變並破壞配置。這個問題可以通過使用'(concat user-emacs-directory「foobar.el」)'來避免,這樣路徑名取決於你設置了'user-emacs-directory'。人們在爲其他人使用配置時應該考慮到這一點。 – Sotanaht

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"))) 
+0

如果您可以使用命令行參數將其中一個值設置爲true,這可能很有用。 – Sotanaht

+1

你可以嘗試像這樣'emacs --eval'(setq * emacs-prelude-enabled * t)' –

+0

我想這是有效的。雖然 – Sotanaht

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 

你甚至可以完成在$符號之後的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/") 

仍然要在每​​。