在Mac下用Emacs最悲傷的事就是, 所有插件都加載完畢以后, 插件一直抱怨找不到各種執(zhí)行文件.
這些在Linux下都完全不用考慮的, 直接加載就可以用.
因?yàn)镸ac默認(rèn)只會讓Emacs使用系統(tǒng)默認(rèn)的環(huán)境變量, 而不會像在終端那樣把所有的環(huán)境變量都加載進(jìn)來.
這樣就導(dǎo)致很多Emacs插件在執(zhí)行外部命令時, 無法在 $PATH 環(huán)境變量中找到期望的二進(jìn)制文件.
解決方案很簡單, 使用 Steve Purcell 開發(fā)的 exec-path-from-shell 即可解決.
一般直接用下面的代碼就可以了:
(when (featurep 'cocoa)
(require 'exec-path-from-shell)
(exec-path-from-shell-initialize))
因?yàn)?exec-path-from-shell 這個插件工作的非常好, 我開發(fā)的所有Emacs插件都會在插件開頭寫上這段代碼保證能夠正確調(diào)用外部命令.
Emacs作為一個永遠(yuǎn)都可以折騰下去的邪惡操作系統(tǒng), exec-path-from-shell 又衍生出另外一個問題:
exec-path-from-shell-initialize 命令要從 shell rc 文件中讀取環(huán)境變量
shell rc 文件越大, 讀取越慢.
想象十幾個Emacs插件啟動的時候都需要執(zhí)行一次
exec-path-from-shell-initialize 命令,
每次你都會感受到一種明顯的頓挫感.
這樣是不是很不爽? 其實(shí) exec-path-from-shell-initialize 命令在最開始執(zhí)行一次就行了, 不用每次都執(zhí)行.
但是我們也不能控制其他Emacs插件的作者, 大家協(xié)調(diào)一致只調(diào)用一次, 他們可能想調(diào)用多少次都是他們的自由.
為了解決這個問題, 我寫了一個新的插件 cache-path-from-shell
這個插件會針對 exec-path-from-shell-initialize 命令建立一個緩存機(jī)制, 確保 exec-path-from-shell-initialize 命令只能執(zhí)行一次,
從而避免多個Emacs插件調(diào)用 exec-path-from-shell-initialize 命令而疊加的延時和不爽.
安裝
再從 cache-path-from-shell 下載 cache-path-from-shell.el
然后在 ~/.emacs 的最開頭的位置加上(注意一定是最開頭的位置)
(require 'cache-path-from-shell)
That's all.