【Emacs】一年成爲Emacs高手(像神一樣使用編輯器)

作者: 陳斌(redguardtoo)

注意: 我會長期維護本文,請參考下面的更新時間

更新時間: 2012-08-06 週一

原創時間: 2012-01-31 週二 15:08

很容易.一年多前我還在Vi陣營,偶爾使用Emacs還總是忘記`退出`(C-x C-c)的快捷鍵,但是一年後我跨入高手行列.

現在網上很多中文文章都是和你強調Emacs有多牛,以激發你的興趣.最有名的大概是王垠Emacs是一種信仰!世界最強編輯器介紹.

這些好文章讓你激動,你因此定下來一個偉大崇高的目標(掌握神一樣的編輯器Emacs),接下來的關鍵就是執行了(如何高效地學習Emacs).

國內關於"如何做"的文章不多,那些涉及到"如何做"的文章,涉及細節比較多,而談一般方法論的較少,所以本文的重點就是談談一般方法,

1 爲什麼要學習Emacs(可選)

簡單談談,因爲我本文的重點是"怎麼做",而不是"爲什麼".

1.1 和單純的IDE比較,Emacs可以做的更多更快

這裏的更多並不是和IDE比支持某編程語言的特性更多,而是指Emacs內可完成的通用的任務比較多更快捷.

例如,我做開發時碰到難題,需要實時上IRC請教國外高手(工作流包括粘貼我的代碼到pastebin或者gist,在irc內提問,看網頁,將解決方案粘貼回來),emacs集成了IRC工具和瀏覽器(w3m),操作就很方便.

我使用Visual Studio有11年了,Firefox使用我也是高手,相信我,大多數情況下還是Emacs更快.

當然口說無憑,請看以下兩段高手操作的youtube視頻:

1.2 使用Emacs可以立刻開始工作.

軟件是開源的,配置是純文本,而且軟件的資源消耗較小,安裝包很小(命令行版本的安裝包30M左右),所以在任何環境下我都可以用Emacs開始工作,overhead很小.

這在大項目中特別明顯,例如,某項目我需要同時編輯perl,java,C,bash,SQL,需要遠程編輯在美國服務器上的代碼,網速也不是很快.Emacs的優勢就體現出來了.

1.3 一年指的是充分利用空閒時間,一年後自然水到渠成

我沒有說一年內必須什麼事也不幹專門學Emacs,懸樑刺股沒有短期利益回報的學習方法是我最反對的.

我贊成的方法是,開始階段花極少的時間得到巨大的回報(如下文談到的Org-mode),以興趣做導向.

每天花多少時間取決於個人需要和如何管理,以我爲例,每天八小時上班時間中有很多零碎時間可以利用,上下班通勤時間有一個小時可以利用.

1.4 態度決定一切

長期來說你能取得的成就是由態度決定的.

優秀人士的兩個特點:

  1. 勇於接受新事物
  2. 追求更強的過程本身就是目的;

2 讀官方教程

打開Emacs後,按Alt-x,輸入help-with-tutorial,回車.

第一步,僅需要半小時.關於Emacs的多難學的謬論可以休矣,因爲半小時的代價微不足道.想想你去年有多少小時白白虛度了吧.

3 以興趣和急需解決的問題作爲切入點

因爲如果微小的努力能得到巨大的回報,你就會越學越有樂趣,進入一個感情上的正反饋.

長期來說,在任何領域要成爲高手,興趣是最重要的.

以我爲例,我急需GTD的工具,emacs的而org-mode是世界上最好的GTD工具(沒有之一).在使用org-mode大大節省了時間後,對於emacs愛屋及烏,興趣高漲了100倍.

4 站在巨人的肩膀上

這方面我是個負面榜樣.開始階段我還是抱着玩的心態,喜歡到處找有趣的配置粘貼到我的.emacs中去.

完全是浪費時間!

我應該一開始就照抄 世界級大師Steve Purcellemacs配置(注意,Purcell的af5ca840版本支持Emacs23.1及更高版本,在Linux/OSX/Cygwin下測試過,更高版本只保證支持emacs24,因purcell只在mac下用emacs24版本,如果一定要使用emacs23,可考慮我的版本,網址見後文).

我請求你不要重複我的錯誤,不要質疑,不要創新,跟着Steve Purcell做.

順便說一下,Steve Purcell的配置需要git才能下載,這意味着你需要安裝git和cygwin(限於windows平臺).這是買一送二,我又給你介紹了兩個高手必備的世界級工具.

考慮到我的熱情會被認爲是傳銷,而我的嚴密邏輯和事實論證可能被忽視,我有必要簡單明瞭地說明推崇Steve Purcell原因:

  • 已有很多人推薦他的配置(請google)
  • 能力出衆,背景相當好(我已調查過他的Linkedin Profile)
  • 人近中年,心智成熟(例如,他只在Mac下使用Emacs24,但是能夠根據我在Linux/Cygwin下使用Emacs23的需求做調整).
  • 工程經驗豐富(看他的代碼一目瞭然)
  • 勇於求新,不斷嘗試新插件,在他這個年齡極爲突出

以上事實在我給出的網址中稍作調查即可得知.

5 在twitter上以"emacs :en"定期搜索

twitter人多,更新結果快

6 在google plus上搜索emacs相關內容

google plus技術geek比例高,我推薦Xah Lee,他的個人網站爲李殺網. Xah Lee有在googleplus上有兩個賬戶,我建議使用我推薦的帳號.

7 訂閱Emacs牛人的博客

最好的是Planet Emacsen,是多個Emacs博客的集合

8 在stackoverflow上搜索emacs相關的討論

google "emacs-related-keywords site:stackoverflow.com"

我會定期搜索,同樣的帖子反覆精讀.因爲stackoverflow上的討論質量很高.

9 github是我的新歡

github的版本控制服務很好.現在它的社區化傾向越來越強了,我喜歡.

例如,可以看一下https://github.com/languages/Emacs%20Lisp上最酷的Emacs插件.

10 使用google快訊

每週一次給我郵箱發一次摘要,僅限最佳結果.這樣的話信息質量可以得到保證

11 將emacs配置管理起來

我將emacs配置納入github的版本控制,見https://github.com/redguardtoo/emacs.d.

版本控制可以是認爲一個集中式的知識管理,任何時刻任何地點對Emacs配置的修改都要及時上傳和合並(merge).這點對於個人能力的長期積累很重要.

12 將emacs相關資料管理起來

我將我收集的所有Emacs相關資訊都放在dropbox的服務器上,然後用dropbox的軟件同步資料到我的智能手機和我的IPad上,這樣我可以充分利用空閒時間學習.

我目前在讀<An Introduction to Programming in Emacs Lisp by Robert J. Chassell>和<Writing GNU Emacs Extensions by Bob Glickstein>.

點擊這裏註冊dropbox帳號.注意,dropbox客戶端完全可以在國內使用,雖然訪問其首頁可能有點問題.

13 訂閱EmacsWiki

EmacsWiki是一個社區維護的Emacs文檔,可以認爲是最酷插件和最佳實踐的集合點.

14 到youtube上看emacs相關的視頻

例如,我就是看了Google Tech Talks上這個Org-mode作者的介紹而愛上org-mode.

15 認識到Emacs是一種生活方式

如果你照着我以上的做法做,就可以認識到Emacs牛人其他也很牛.Emacs實際上體現了牛人的一種生活方式.

像那些牛人一樣思考,像那些牛人一樣做事,不要懷疑,不要猶豫,很快你就會發覺自己也開始有些牛人的氣質了.

例如,Sacha Chua就是這樣一個有牛人氣質的女孩,這是她的Youtube錄像.

更直白地說,我認爲Emacs不僅僅是一種工具,它可以提升人的素質,讓人學會謙卑.

至少對我而言,當我明白了Emacs的其樸素的設計思想和其強大的功能後,我的感覺是敬畏,因爲我做不出這樣的軟件.

我既沒有能力把一個編輯器設計成一個人工智能語言Lisp的平臺,也不可能花30多年的時間對一個軟件精益求精.

16 小結

看到這裏你應該很清楚了,我的方法就是以興趣作爲切入點,以天才作爲榜樣,大量閱讀,大量練習.

如果你想獲得真才實學,想變得更強,變得更優秀,這就是唯一的方法,唯一的捷徑.

這個方法不是我發明的,古往今來的傑出人士都是這麼做的,如果你需要一點"更科學的"論證,請參考一萬小時天才理論.

17 聯繫我

這是我的twittergoogle plus以及微博,也可以通過我的email<chenbin DOT sh AT GMAIL DOT COM>聯繫我.

我的主力博客爲http://blog.binchen.org.

我不會回答Emacs配置的具體問題,因爲如果你通讀本文,應該知道哪裏找答案更好.

18 答疑

18.1 我已是Vi高手,爲什麼要轉到Emacs來?

嘿嘿,我也是Vi精通後轉到Emacs的.我轉換陣營的原因就是因爲Emacs的強大(例如和gdb的完美結合)以及其腳本語言是lisp.

當然Vi的多模式編輯和快捷鍵比Emacs要高效得多,所以最佳方案是Vi的快捷鍵加上Emacs的強大.

目前我在用evil-mode,在Emacs下模擬Vim操作,結合了兩者的優點.簡單地說,現在我的運行模式"神用編輯器之神".

18.2 如有任何關於具體如何配置Emacs的問題

請善用google和我提供的信息 例如:

  • 在.emacs.d中的init.el文件起什麼作用? google "emacswiki init.el"

18.3 使用牛人的配置後啓動emacs報錯,如何解決?

重新啓動emacs,帶上"–debug-init"參數,然後將顯示的錯誤信息及環境報告牛人,給我也行.

18.4 爲什麼我用了牛人的配置後自己額外添加的插件無效

Emacs是個開放平臺,其衆多插件release之前並不一定有嚴格的測試.所以插件之間可能有衝突.

這也是我爲什麼建議初學者直接使用牛人配置的原因,因爲牛人已經解決了衆多兼容性的問題,你只要直接享受他的服務就行了.

即使你發覺了牛人尚未來得及處理的bug,最有效的方法是提交bug報告給牛人,而不是自己去鑽研elisp.

18.5 我想用Windows版本的Emacs而不是Cygwin版本的Emacs,怎麼做?

需要對基本的命令行操作有一定的熟悉.關鍵知識點有兩個:

  1. 設置HOME環境變量,因爲.emacs.d中的某些elisp腳本假定.emacd.d在HOME所指的路徑中.
  2. Emacs的某些功能需要使用第三方的命令行工具,這些工具的路徑應該添加至環境變量PATH中.

如果你不知道如何在Windows下添加修改環境變量,不知道如何安裝第三方工具,建議還是先用cygwin,因爲cygwin已自帶某些工具,沒有的話,安裝也和方便.且在cygwin下環境變量HOME默認已有.

第三方命令行工具清單請參考上文我的.emacs.d中的README(Steve Purcell沒有列出這些工具,因他只用OS X).

18.6 爲什麼Emacs啓動時從服務器(elpa)安裝第三方軟件包(package)會失敗?

請啓動Emacs後,運行M-x list-packages以從服務器更新最新的軟件索引,然後重啓Emacs即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章