Emacs 折騰之旅起航

Emacs的作者就是大名鼎鼎的 Richard Stallman, 教主一生強(qiáng)調(diào)使用軟件的自由, 所以Emacs默認(rèn)有很多反人類的配置讓眾多用戶撞墻淮野, 加上Emacs社區(qū)的黑客開發(fā)節(jié)奏非常快吹泡, 真正要把Emacs用爽還是要大量修改默認(rèn)配置和添加新的插件骤星。

Emacs應(yīng)該是Linux社區(qū)折騰最兇的自由軟件了, 甚至折騰力度遠(yuǎn)遠(yuǎn)超過眾多Linux發(fā)行版爆哑, 大多數(shù)Emacs用戶之所有放棄Emacs是因為在網(wǎng)上拷貝了一段自己都不懂的Elisp代碼然后扔到 ~/.emacs 里面后導(dǎo)致Emacs啟動不了洞难, 自己又不知道錯誤原因也看不懂天書一般的Elisp代碼, 所以在我們真正玩 Emacs 之前要先了解一些 Emacs 的基本知識和排錯技巧泪漂, 一旦掌握了這些技巧以后廊营, 折騰 Emacs 將不再痛苦, 而是非常過癮的探險之旅萝勤。

Emacs 的啟動順序

Emacs 讀取配置文件的地方有兩個:

  1. /usr/share/emacs/common/share/emacs/site-lisp/site-start.el
  2. ~/.emacs

Emacs 在啟動的時候會從系統(tǒng)目錄讀取 site-start.el 的配置露筒, 然后再讀取 ~/.emacs 文件的配置。
一般來說系統(tǒng)級別的 site-start.el 是用于定制 Emacs 的版本用的(比如我為 Deepin 團(tuán)隊定制的 deepin-emacs) 防止受到用戶級別的 ~/.emacs 的配置文件干擾敌卓。
一般來說玩 Emacs 只用把個人的配置文件丟到 ~/.emacs 就可以了

玩新配置和新插件的正確姿勢

我看到很多Emacs新手喜歡從網(wǎng)上搜索各種帖子的 Elisp 代碼慎式, 不管是否理解還是這段代碼是否有用, 一股腦全部扔到 ~/.emacs 趟径, 當(dāng)某段配置文件有錯誤時導(dǎo)致 Emacs 啟動不了以后瘪吏, 他也不知道到底哪段代碼出現(xiàn)問題了, 然后就在 ~/.emacs 中胡亂改蜗巧, 越改越掛掌眠, 最后失去耐心放棄了。

我自己玩 300+ 的插件幕屹, 很多插件經(jīng)常代碼都是互相影響蓝丙, 所以自己寫了下面一段代碼用于加載制定目錄的 Elisp 插件, 平常新加的配置和插件代碼都按照目錄方式分類存放望拖, 一旦真的出錯或者自己都搞不定渺尘, 就先刪除出問題的插件子目錄, 避免新的配置影響現(xiàn)有配置導(dǎo)致沒法使用 Emacs:

(defun add-subdirs-to-load-path (dir)
  "Recursive add directories to 'load-path'."
  (let ((default-directory (file-name-as-directory dir)))
    (add-to-list 'load-path dir)
   (normal-top-level-add-subdirs-to-load-path)))
(add-subdirs-to-load-path "/home/user/.emacs-config")

在折騰Emacs之前说敏, 你先把上面代碼拷貝到你的 ~/.emacs 文件中保存鸥跟, 把 /home/user/.emacs-config 中的 user 換成你的用戶名, 然后在主目錄新建 .emacs-config 目錄盔沫。
以后有新的插件就在 ~/.emacs-config 目錄下新建子目錄医咨, 然后把配置文件扔進(jìn)去, 一旦發(fā)生錯誤就直接子目錄就可以快速恢復(fù)到上次正常的狀態(tài)架诞。

比如今天我在網(wǎng)絡(luò)上看到 auto-complete 這個插件很牛逼腋逆, 我直接在 ~/.emacs-config 目錄下新建一個 auto-complete 子目錄, 然后把網(wǎng)上拷貝的配置文件全部都到 auto-complete 子目錄下侈贷。
下次 Emacs 重啟的時候就會遞歸的掃描 ~/.emacs-config 所有文件并進(jìn)行加載惩歉, 如果 auto-complete 插件有任何配置不對的地方, 直接刪除 ~/.emacs-config/auto-complete 目錄即可繼續(xù)折騰了俏蛮。

注意這個方法并不是保證你在網(wǎng)絡(luò)上拷貝的任何插件不會出問題撑蚌, 也不會降低哪怕一分的折騰工作, 他只是提供一種良好的習(xí)慣搏屑, 讓你在折騰插件的過程中通過刪除有問題插件的目錄來快速恢復(fù)上次正常狀態(tài)争涌, 避免初學(xué)者被打擊夠失去耐心。

Emacs 出錯信息打印

插件出錯以后辣恋, 好一點的是 Emacs 會什么都不顯示亮垫, 但是就是沒法正常工作模软, 運氣差一點的Emacs會在啟動過程中快速崩潰消失。

所以在折騰任何Emacs插件時饮潦, 首先要得到 Emacs 的出錯信息燃异, 只有得到出錯信心才能快速的去尋找解決方案,這個技能很簡單继蜡, 就是在 Emacs 啟動的時候加一個 --debug-init 參數(shù)回俐, 比如像下面這樣啟動Emacs:

emacs --debug-init

這樣Emacs在加載配置文件的時候就會啟用調(diào)試器, 一旦發(fā)生錯誤后稀并, Emacs不會崩潰一閃而過仅颇, 而是在調(diào)試器中告訴你在加載配置文件的哪一個函數(shù)出現(xiàn)了的具體問題信息, 然后我們就可以拿著問題的信息去研究修復(fù)了碘举。

因為很多初學(xué)者對Emacs不是非常熟悉忘瓦, 經(jīng)常不知道 Emacs 默認(rèn)的行為是什么, 甚至無從判斷問題是 Emacs 本身就有問題還是自己添加的配置有問題引颈, 其實只用在啟動的時候添加 -Q 參數(shù)就可以了政冻, 像這樣:

emacs -Q

這樣Emacs就不會加載任何配置文件, 你可以對比Emacs默認(rèn)的行為來判斷是否真的是因為配置文件引起的問題线欲。

善用 EmacsWiki明场、Google 、郵件列表和IRC

上面我們已經(jīng)可以通過 --debug-init 選項可以定位到配置出錯的問題李丰, 國內(nèi)很多用戶粘貼了幾屏的出錯信息苦锨, 然后扔到論壇, 一句跪求的帖子趴泌, 也不說自己原來干了什么舟舒, 折騰的過程, 直接就是錯誤信息就期待高手馬上出來幫他解決問題嗜憔, 這種方法不但在國內(nèi)秃励, 即使在世界上所有地方都是不歡迎的。

一般我們得到錯誤信息以后吉捶, 我們要把最上面一行出錯信息拷貝出來夺鲜, 先在 EmacsWiki 和 Google 上搜索一下是否有其他問題也有相同的問題? 如果有相同的問題呐舔, 一般都已經(jīng)有解決方案了币励, 如果能夠自己搜索、理解和解決問題就不要當(dāng)伸手黨珊拼, 這是學(xué)習(xí)提高的必備過程食呻, 也是折騰的樂趣之一。

如果實在找不到解決方案, 就把出錯信息最上面一行開始往下拷貝20行左右的上下文仅胞, 然后把自己折騰插件的過程(從什么地方下載的插件每辟、怎么加載配置文件的、遇到的錯誤信息干旧、自己嘗試解決方案的思路渠欺, 比如已經(jīng)在 EmacsWiki 和 Google 搜索過了)粘貼到 Emacs 郵件列表 和 Emacs IRC頻道 (#emacs 6667 irc.freenode.net)( IRC頻道歷來規(guī)矩就是避免粘貼大段文字到頻道中, IRC 頻道建議先粘貼到 paste2.org 這種粘貼分享網(wǎng)站莱革, 再把分享地址粘貼到 IRC 頻道峻堰, 以尊重 IRC 頻道其他人)讹开, 然后等待社區(qū)高手的幫助盅视, 只要你自己是動腦筋, 即使你的能力差一點很多熱心的高手都愿意幫助旦万, 千萬千萬不要做一個大爺姿態(tài)的伸手黨闹击, 尤其你面對的是全世界的頂尖高手。

Enjoy

只要你掌握上面的基本要點成艘, 再加上持之以恒赏半, 你總有一天會變成一位非常厲害的編程高手的...

更多 Emacs hacking 技巧請見下回分曉.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淆两,隨后出現(xiàn)的幾起案子断箫,更是在濱河造成了極大的恐慌,老刑警劉巖秋冰,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仲义,死亡現(xiàn)場離奇詭異,居然都是意外死亡剑勾,警方通過查閱死者的電腦和手機(jī)埃撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虽另,“玉大人暂刘,你說我怎么就攤上這事∥娲蹋” “怎么了谣拣?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長族展。 經(jīng)常有香客問我芝发,道長,這世上最難降的妖魔是什么苛谷? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任辅鲸,我火速辦了婚禮,結(jié)果婚禮上腹殿,老公的妹妹穿的比我還像新娘独悴。我一直安慰自己例书,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布刻炒。 她就那樣靜靜地躺著决采,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坟奥。 梳的紋絲不亂的頭發(fā)上树瞭,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音爱谁,去河邊找鬼晒喷。 笑死,一個胖子當(dāng)著我的面吹牛访敌,可吹牛的內(nèi)容都是我干的凉敲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺旺,長吁一口氣:“原來是場噩夢啊……” “哼爷抓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起阻塑,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蓝撇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陈莽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渤昌,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年传透,在試婚紗的時候發(fā)現(xiàn)自己被綠了耘沼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朱盐,死狀恐怖群嗤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兵琳,我是刑警寧澤狂秘,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站躯肌,受9級特大地震影響者春,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜清女,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一钱烟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦拴袭、人聲如沸读第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怜瞒。三九已至,卻和暖如春般哼,著一層夾襖步出監(jiān)牢的瞬間吴汪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蒸眠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留漾橙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓黔宛,卻偏偏與公主長得像近刘,于是被迫代替她去往敵國和親擒贸。 傳聞我的和親對象是個殘疾皇子臀晃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 教程存檔Github 序|Preface 先來一篇有趣的簡介:Emacs和Vim:神的編輯器和編輯器之神 - 51...
    北魏企鵝閱讀 137,879評論 18 224
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)介劫,斷路器徽惋,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 在上海讀大二的時候,有機(jī)會去國外做交換生座韵。那個時候很努力的準(zhǔn)備了一段時間险绘,學(xué)校組織了一場類似于雅思的考試。按照考試...
    one_alone閱讀 285評論 0 3
  • 自9月加入簡書起誉碴,發(fā)現(xiàn)里面有不少文章是寫關(guān)于理財方面的知識宦棺,自己在這塊一直處于空白之地,想著希望女兒這方面可不能一...
    走向陽光的自己閱讀 401評論 3 4