- Emacs的運(yùn)行方式分析
===================
Emacs可以在大多數(shù)目前常見的系統(tǒng)中運(yùn)行,GNU/Linux合陵、FreeBSD枢赔、macOS、Windows等都可以拥知。一般來說在
Emacs主頁 下載對應(yīng)的版本踏拜,在本地展開或安裝后就可以跑起來了。不過聰明的讀者一定發(fā)現(xiàn)了低剔,Emacs需要中用戶的主目錄(系統(tǒng)變量HOME指向的目錄)速梗,例如肮塞,Windows操作系統(tǒng)中登錄用戶的賬戶目錄(例如C:\Users\ABC),讀取配置文件镀琉。如果在這個目錄中沒有找到配置文件峦嗤,Emacs也會自己創(chuàng)建配置文件,用以保存用戶在使用過程中的一些自定義內(nèi)容屋摔。
這樣烁设,問題來了,如果我想隨身攜帶Emacs作為寫作工具可行嗎钓试?我不停的在不同的計算機(jī)上寫東西装黑,我怎么保證我的寫作體驗(yàn)不變呢?難道我需要在每一臺臨時使用的計算機(jī)上安裝Emacs的運(yùn)行環(huán)境(特別是那些擴(kuò)展Package)弓熏?那如果遇到了沒有Home目錄的寫入權(quán)限怎么辦恋谭?如果依賴了某些特殊的Package版本怎么版?
聽起來挽鞠,問題似乎非常多疚颊。好在,我們現(xiàn)在有一個大家耳熟能詳?shù)拿~——“綠色軟件”信认。
我們?nèi)绻梢宰孍macs脫離系統(tǒng)定義的HOME目錄位置材义,從一個預(yù)先定義好的位置讀取配置文件,那不就成了可以獨(dú)立運(yùn)行的綠色軟件了嗎嫁赏?
- 讓Emacs綠色運(yùn)行
===============
要讓Emacs隨身運(yùn)行其掂,我們需要先來看看Emacs配置文件的存放方法
2.1 Emacs的配置文件
在Windows環(huán)境下,Emacs的配置文件有如下幾種文件保存方法[1]:
-
.emacs
文件潦蝇。 -
_emacs
文件款熬。以保證在Dos和FAT文件系統(tǒng)下的向前兼容。 -
.emacs.d/init.el
使用init.el作為啟動文件攘乒,并.emacs.d
目錄管理Emacs的各種配置文件贤牛。
2.2 全面查看Emacs的配置存放方法
從Emacs的手冊中,我們可以看到Emacs配置文件在Windows操作系統(tǒng)中按以下優(yōu)先級確定指定配置文件的存放位置[2]:
- 如果設(shè)置了
HOME
環(huán)境變量则酝,那么直接存放在該環(huán)境變量指定的目錄位置中 - 如果設(shè)置了
HKCU\SOFTWARE\GNU\Emacs\HOME
注冊表主鍵盔夜,那么使用該主鍵指明的目錄位置 - 如果設(shè)置了
HKLM\SOFTWARE\GNU\Emacs\HOME
注冊表逐漸,那么使用該主鍵指明的目錄位置堤魁。由于該目錄位置會被不同Windows用戶共享使用喂链,因此不推薦使用該鍵值。 - 如果
C:\.emacs
存在妥泉,則使用C:/.
存放配置文件椭微。
這個設(shè)計是為了保證前向兼容,在以前的Emacs版本中盲链,如果HOME
目錄沒有定義蝇率,則使用默認(rèn)的C:/
作為HOME目錄迟杂。 - 使用Windows 用戶的
AppData
目錄。通常這個目錄位于用戶profile目錄中本慕。具體位置根據(jù)Windows版本及計算機(jī)所在的域名的不同而有所變化排拷。
所以,讓Emacs脫離操作系統(tǒng)的限制锅尘,以綠色方式運(yùn)行的方法再指定 HOME
環(huán)境變量的內(nèi)容监氢。而且,需要避免對其他使用HOME環(huán)境變量的程序藤违,如
Vim浪腐,的影響(如果你想左右互博的話,:P)顿乒。
2.3 找到Emacs代碼設(shè)置HOME環(huán)境變量的地方
Emacs提供了在加載用戶配置文件前進(jìn)行運(yùn)行環(huán)境定義的方法议街,按照代碼在運(yùn)行時刻的執(zhí)行優(yōu)先級
[3] 列舉如下:
- site-start.el
- init file
- default.el
從這個加載順序,可以看到璧榄,修改site-start.el是修改 init
文件讀取位置的好地方特漩。
2.4 確定修改方法
在Emacs中,要設(shè)置環(huán)境變量骨杂,可以使用 setenv
函數(shù)來實(shí)現(xiàn)涂身。查看幫助,我們看到函數(shù)定義是:
(setenv VARIABLE &optional VALUE SUBSTITUTE-ENV-VARS)
腊脱。所以访得,我們可以使用這樣的形式來設(shè)置環(huán)境變量:
(setenv "HOME" "path/to/some/directory")
為了讓Emacs脫離特定操作系統(tǒng)的設(shè)置龙亲,我們可以寫一些小代碼陕凹,動態(tài)獲得當(dāng)前Emacs所在的目錄,并將其所在磁盤的根目錄下的home
目錄(名)作為存放配置文件的HOME目錄鳄炉。
所以我們可以得到完整的代碼杜耙。
2.5 Emacs代碼
(defvar PortableHome (substring data-directory 0 3))
(defvar usb-home-dir (concat PortableHome "home/"))
(setenv "HOME" usb-home-dir)
- 代碼使用及總結(jié)
==============
3.1 代碼使用
將上述代碼存放到site-start.el文件中。并將這個文件存放到Emacs的site-lisp目錄中拂盯。并將你的配置文件放到Emacs所在磁盤根目錄下的home目錄中(按照.emacs佑女、emacs、.emacs.d/init.el三種方式之一)谈竿,好了团驱,重啟Emacs,你應(yīng)該看到空凸,你的Emacs已經(jīng)按照你的配置運(yùn)行起來啦嚎花!
把Emacs相關(guān)文件以及你新創(chuàng)建的Home目錄中的所有內(nèi)容都復(fù)制到一個U盤中吧,你會發(fā)現(xiàn)無論在那一臺計算機(jī)上呀洲,你的Emacs都可以一如既往為你提供統(tǒng)一的文本編輯功能啦紊选!
3.2 總結(jié)
本文描述了讓Emacs脫離特定操作系統(tǒng)的限制(更換操作系統(tǒng)類型時啼止,需要使用對應(yīng)系統(tǒng)的Emacs可執(zhí)行文件,但配置文件是可以做到統(tǒng)一的)兵罢。在U盤中運(yùn)行的一種方法献烦。我使用這種方法,使我的Emacs在從Win7升級到Win10的過程中卖词,不必重新進(jìn)行任何配置巩那,保持了統(tǒng)一的使用體驗(yàn)。也讓我在解決使用Windows的過程中一定會遇到的重新安裝系統(tǒng)坏平,簡化了工作環(huán)境初始化的工作量拢操。
我可以安心的去喝一杯可樂,等待備份復(fù)制進(jìn)程跑完舶替,我的Emacs就會滿血復(fù)活令境。
你們的Emacs呢?:P
- 參考文檔
=========
-
https://www.gnu.org/software/emacs/manual/efaq-w32.html#Location-of-init-file ?
-
https://www.gnu.org/software/emacs/manual/efaq-w32.html#Location-of-init-file ?
-
從Emacs的site-run-file變量文檔中看到顾瞪,不同配置文件的執(zhí)行優(yōu)先級順序舔庶。 ?