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

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

做者:陳斌(redguardtoo)javascript

版本:20140722html

更新時間: 2014-07-22 Tue前端

原創時間: 2012-01-31 Tuejava

版權:本文採用下面協議進行受權,自由轉載 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,轉載請註明做者及出處.node

1 簡單介紹

成爲 Emacs 高手很是easy.一年前我還在 Vi 陣營,偶爾用 Emacs 還忘記"退出"的快捷鍵,但一年後我跨入高手行列.git

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

這些好文章讓你激動,你所以定下一個偉大目標 (掌握神同樣的編輯器 Emacs),接下來就是運行了 (怎樣高效地學習 Emacs).web

網上關於"怎樣作"的文章很少,那些涉及到 "怎樣作" 的文章,涉及細節多而談方法論少,因此本文的重點就是談談通常方法.算法

全文結構大體例如如下:編程

  • 首先會介紹爲何Emacs值得學習,假設你對開源文化至關熟悉認同可跳過這一章,不然至少應讀一下態度一節.
  • 而後就是本文最核心的觀點,儘快掌握Emacs的關鍵步驟.
  • 後面幾章是進一步提升技巧的方法提示(社區,閱讀,知識管理)
  • 當你提升到必定階段,你應該能跳出詳細Emacs技巧,讚揚Emacs的品味和其使用者的氣質
  • 最後是答疑和小結

2 爲何要用Emacs(可選)

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

2.1 Emacs 的特色決定了其社區的平均技術水準都不低

Emacs 用 Lisp 開發,Lisp 的不一樣日常的語法決定了其開發人員都是資深開發人員,掌握了多門語言.

Emacs 自己並不能給你帶來不論什麼優勢,這就決定了其社區成員都是純粹的技術人員,投機取巧的功利主義者對其是沒有興趣.

2.2 和單純的 IDE 比較,Emacs 可以作的不少其它更快

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

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

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

固然口說無憑,請看下面兩段高手操做的 youtube 視頻:

2.3 Emacs 是自由軟件基金會開發的招牌開源軟件

我的會喪失開發軟件的興趣,公司會倒閉而中止維護軟件.但是自由軟件基金會會一直存在下去.Emacs 做爲其招牌軟件也會一直維護下去,我在其上投資永遠不會貶值.

2.4 使用 Emacs 可以立馬開始工做.

軟件是開源的,配置是純文本,而且軟件的資源消耗較小,安裝包很是小 (命令行版本號的安裝包 30M 左右),因此在不論什麼環境下我都可以用 Emacs 開始工做,overhead 很是小.

這在大項目中特別明顯,好比,某項目我需要同一時候編輯 perl、java、C、bash、SQL,需要遠程編輯在美國server上的代碼,網速也不是很是快.Emacs 的優點就體現出來了.

2.5 一年指的是充分利用空暇時間,一年後天然水到渠成

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

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

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

2.6 態度決定一切

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

優秀人士的特色:

  1. 敢於接受新事物
  2. 追求更強的過程自己就是目的
  3. 觸類旁通

好比,儘管 Emacs 默認的快捷鍵已很是高效,但是我更新了個人快捷鍵操做.保存文件時我原來要按按 "Ctrl+X Ctrl+S",現在按 ",ww".少按了一個鍵,同一時候手指避免了額外移動一寸去按 Ctrl 鍵.

這彷佛是個微小的修改,因爲保存文件並不是一個很是頻繁的動做.而且放棄熟悉的快捷鍵操做,使用一個陌生的快捷鍵開始也有點不習慣 (後文我提到,我也是一個熟練的 Vim 用戶,但是 Vim 的保存快捷鍵默認是 ":w",並不是現在的鍵位).

但是這僅僅是我改進效率的一個開端,我花了幾個月時間把所有的操做都以相似的方法優化了一邊. 而後我又想到了進一步的優化應該有可靠的統計數據爲基礎,因此我安裝了名爲 keyfreq 的 Emacs 插件,對於我使用最頻繁的操做又一次分配了最方便的快捷鍵.

若是我一開始因爲已習慣了 Vim 或者 Emacs 默認的快捷鍵,或因爲改進保存文件動做的效率提高過小,因此拒絕改變,那麼就不會有後來的大規模優化鍵位的project.

或者有人說輸入代碼效率僅僅是軟件開發流程中很是小一部分,重要的是 "XXXX(編程思想,架構,框架…)".此所謂顧左右而言它.假設你能觸類旁通,天然可以猜到相同的方法和原則也適用於軟件開發的不論什麼一部分," 但是…" 僅僅是不作的藉口罷了.

3 詳細步驟

Emacs本質上是給geek(熱愛技術,追求高效的人)使用的軟件.因此使用它需要一點點Linux的基本知識.假設你沒有這方面的經驗,那麼下一節"無Linux經驗新手高速指南"就是爲你準備的.不然可跳過.

步驟的要點在於起點要高,照抄高手的配置,儘可能理解高手的配置,不要改動,除非你要給高手報bug.

熟悉配置後應增長社區,使用高手開發的插件,培養品味.到達必定的程度後要回報社區,多作測試,多報bug.

3.1 無Linux/Unix經驗新手的高速指南(可選)

下面是個人建議:

  • 安裝Emacs 24
  • 不要安裝不論什麼第三方插件
  • 掌握基本知識,什麼是環境變量(比方PATH, HOME之類的變量),什麼是stdin, stdout, pipe.
  • 讀官方教程,學會主要的文本操做(大概十幾個快捷鍵)
  • 使用Emacs 24自帶的org-mode做爲你的我的時間管理軟件.
  • org-mode關鍵是用起來,僅僅要記住按TAB鍵是展開內容就可以了,其它都不用學.

實際上我在後文已經把這個怎樣入手的問題說得很是清楚了.

比方我後文談到,我就是從org-mode入手的,又談到你應跟着高手學習而不要本身瞎摸索.假設能觸類旁通,你應想到假設你不肯定從何處着手,那麼跟着我作(用org-mode)應該是不會錯的.

3.2 讀官方教程

打開 Emacs 後,同一時候按下 Alt 和 X 健,輸入 help-with-tutorial(後文中,相似快捷鍵以簡寫 `M-x help-with-tutorial` 取代),回車.

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

這步是必須的,不要跳過!

好比,很是多人的問題是不知道怎樣查看變量函數的文檔,這在官方教程中都有說明.

3.3 以興趣和急需解決的問題做爲切入點

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

長期來講,在不論什麼領域要成爲高手,興趣是最重要的.

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

讓我再舉個反面的樣例說明,Emacs的email軟件Gnus儘管某些特定功能強大(比方高速插入郵件附件,生成HTML表格),但是由於很是長時間沒有更新,其UI已至關落後於時代,對於通常用戶來講其UI及其費解.

我知道有資深的10年經驗的Emacs用戶也認爲Gnus太難用.

即便你終於學會了Gnus,能作的事也和Gmail的Web版本號有差距(比方搜索郵件,附件預覽),而且Linux下也有不少同類軟件.這就是典型的投資極大,回報很是小.

因此對新手來講,從Gnus入手Emacs是很是成問題的.

3.4 站在巨人的肩膀上

這方面我是個負面模範.一開始我仍是抱着玩的心態,喜歡處處找有趣的配置粘貼到個人 .emacs 中去.

這是浪費時間!

我應該一開始就照抄 世界級大師 Steve Purcellemacs 配置.

警告,Purcell 總愛試用最新的 Web 開發的新技術,對他而言穩定性不是第一位的,假設你有足夠的熱情和能力,願意和他一塊兒折騰,那麼你的 Emacs 水平會提升得很是快

這個假設是很是重要的前提,當我上了 Purcell 的賊船時,我已有 10 年開發經驗,精通多種開發語言.

假設你不肯意過於折騰,那麼你至少不要反覆個人錯誤,你不要質疑,你不要創新,你要跟着高手作.比方 Eric Schulte 的 Emacs-starter-kit 很是適合剛開始學習的人.Bozhidar Batsov 的配置 也不錯 (不必定適合剛開始學習的人).也可以用 個人配置.

直說了把,你是剛開始學習的人,開始階段應以學習模仿爲主.這點怎麼強調也只是分!

爲了加深印象,讓我再舉一個樣例.一些讀者向我反映,Emacs 快捷鍵太多,背起來壓力很是大.實際上這是剛開始學習的人先入爲主的偏見.對高手來講,有了恰當的工具後,快捷鍵很是多狀況下並不需要.盲目地去背快捷鍵僅僅會延遲你成爲高手那一刻的到來.假設你僅僅是複製了高手的配置開始使用而不是糾結於完畢背快捷鍵這個無聊的任務,你會發覺高手已安裝了名爲 smex 的插件,使得你直接輸入命令比用快捷鍵還快.因此背快捷鍵也不需要了.

這是本文最核心的觀點, 假設你尚未信服的話,請再考慮一下個人理由:

  • 我文章的標題是 一年成爲高手,不是一年入門.
  • 高手是世界級別的高手,不是關起門來一個特定小圈子內的高手
  • 我就是這麼作的,你可以看看一年內我給他報了多少 bug.
  • 說到底是態度問題,假設你真正下定決心了,考慮到Purcell的天賦和勤奮,追趕他的最好辦法顯然僅僅有增長他.
  • 要超越世界級高手就必須瞭解高手的標杆在哪裏,你需要一年的時間去模仿去學習.
  • 你基於Purcell的配置給他報bug(甚至是提交補丁),那你就是考慮到了他沒有考慮到的問題,至少在這個問題上你就超過他了,日積月累成果就很是可觀了.

4 增長社區更上一層樓

假設要充分利用社區,最重要的是專注.

好比在Quora.com上有很是多有趣的話題.我會節制本身的興趣,不去定閱和Emacs無關的話題.

4.1 google plus 的 Emacs 社區

Google Plus 的 Emacs 社區 在此時Geek 的氣場很強,討論的貼子質量很高.我上過許多大衆和小衆的 Emacs 社區,這是個人經驗之談.好比,我增長了 Linkedin 和 Facebook 的 Emacs 社區,眼下都退出了.並不是這些社區不夠專業,僅僅是 Google Plus 討論問題的技術層次比較高.

假設你僅僅能增長一個網絡社區的話,那麼就是 Google Plus 了.

4.2 GitHub 是 geek 雲集的地方

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

好比,可以看一下 https://github.com/search?p=1&q=stars%3A%3E20+extension%3Ael+language%3Aelisp&ref=searchresults&type=Repositories 上最酷的 Emacs 插件.

4.3 Emacs牛人的博客

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

4.4 Quora.com

我偏心的是"列舉Emacs中最實用的命令"之類的詳細問題.很是多回答拓寬了個人眼界.即便我已至關精通Emacs.

那種"怎樣掌握Emacs"的問題,人人都能插上一腳.即便有些高水平的的回答,也淹沒在衆多平凡的回答中.

即便你的問題是比較泛泛而談的,從一個能夠測量的水準的詳細問題入手找到高手,而後看高手是怎樣回答那些比較泛泛而談的問題的.

4.5 在 twitter 上以 "emacs :en" 按期搜索

twitter 人多,更新結果快.之因此加上":en"是因爲有很是多日文內容,我不懂日文.

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

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

我會按期搜索,相同的帖子重複精讀.因爲 stackoverflow 上的討論質量很是高.

4.7 到 Youtube 上看 emacs 相關的視頻

好比,我就是看了 Google Tech Talks 上這個 Org-mode 做者的介紹 而愛上 org-mode.

注意,Youtube 搜索的結果是最佳匹配的.問題是關於 Emacs 的視頻並不太多,假設依照 Youtube 的算法,我每次搜索看到的老是那幾個錄像.因此假設關注重點是看看 Emacs 社區有些什麼新東西的話,默認搜索結果應以時間排序.

5 閱讀是最有效的學習方式

5.1 EmacsWiki

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

有人抱怨EmacsWiki文檔太亂了,質量也參差不齊.對於前者我也有同感.對於後者我不贊同.EmacsWiki的文檔質量至關高,因其是惟一由社區維護的半官方的文檔.耐心忍受其亂中有序的現狀吧.

讀EmacsWiki的最佳方法是,選定一個特定主題,從頭讀到尾.這樣你對特定主題的最新進展都瞭解了.是否要採用EmacsWiki的建議另當別論.

5.2 Emacs Lisp 書籍推薦(可選)

<Writing GNU Emacs Extensions by Bob Glickstein>是Elisp編程書籍中最好的.生動,樣例豐富.做者明顯是高手,並且用心安排了書的結構.好比,他很是早就介紹了 defadvice 的使用方法.我很是認同這點,defadvice 是 elisp 語言的精華.

Xah Lee 提供 付費 Emacs Lisp 教程 也至關不錯.

5.3 Steve Yegge的Emacs Lisp教程

他的Emergency Elisp很是不錯,因爲很是簡潔.我特別喜歡"Statements"一章.

6 知識管理

決不要低估長期的自我管理的累積效應.

我經常看到有人在網上悲傷地抱怨說因爲重裝電腦,幾年積攢的emacs配置都丟失了.也有人自豪地宣稱把本身的.emacs主動幹掉,爲的是弄一個組織的更好的配置.

你的技巧是成指數增加的,知識積累的越多,這些知識之間的聯繫就會越多.這些聯繫增加的速度是以指數的方式增加的.把你emacs配置從頭來過,意味着你的積累的知識書面記錄丟失了.損失是很是大的.

因此我建議決不要丟棄你的Emacs配置.

這也是後文我談到的爲何要用工具保存emacs配置和相關知識.

6.1 emacs 配置歸入 github 的版本號控制

個人配置見 https://github.com/redguardtoo/emacs.d.

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

共享Emacs實際也是一種利己的行爲,有很是多人使用個人配置,等於幫我測試.

6.2 將 emacs 相關資料 (如電子圖書,博客文章) 備份

我將所有 Emacs 相關資訊都放在 dropbox 的server上,這樣資料就同步到個人智能手機和個人平板電腦上,我可以充分利用空暇時間學習.

點擊這裏註冊 dropbox 賬號.注意,dropbox client全然可以在國內使用,儘管訪問其首頁可能有點問題.

我還寫了不少博客文章.這些文章都存在org格式的文件裏.最後公佈的靜態博客也歸入版本號控制,參見http://github.com/redguardtoo/blog.binchen.org.

7 Emacs第三方插件推薦

Emacs第三方插件很是多.剛開始學習的人的問題是裝了太多插件,插件的管理成了問題.

我建議一開始選擇插件的原則應該少而精,被最棒的插件培養出了品味後,可自由挑選適合的插件.

我推薦插件標準例如如下:

  • 高品質
  • 經常更新
  • 功能強大

所有插件都可以經過Emacs的包管理器下載.

下面是插件清單:

名稱 說明 同類插件
evil 將 Emacs 變爲 vi viper
org org-mode,全能的 note 工具 不知道
org2blog 給 wordpress 寫博客 不知道
company-mode 本身主動完畢輸入,支持各類語言和後端 cedet,auto-complete
expand-region 按快捷鍵選中當前文本,可以將選擇區域擴展或者收縮 不知道
smex 讓輸入 M-x command 變得飛快 不知道
yasnippet 強大的文本模板輸入工具 不知道
flymake-xxxx 以 flymake 開頭的所有包,針對不一樣語言作語法檢查 flycheck
helm 選擇和本身主動完畢的框架,在其上有很是多插件完畢詳細功能 ido
ido 和 helm 相似,我是 helm 和 ido 同一時候用 helm
js2-mode javascript 的 major-mode,自帶 javascript 語法解釋器 javascript-mode、js-mode、js3-mode
w3m Emacs 的網絡瀏覽器(需安裝命令行工具w3m) 不知道
elnode elisp 寫的 Web server 不知道
smartparens 本身主動輸入需要成對輸入的字符如右括號之類的字符 autopair
window-numbering.el 跳轉到不一樣的子窗體 不知道
web-mode 支持各類 HTML 文件 nxml-mode、nxhtml-mode、html-mode

8 Emacs 是一種生活方式

假設你照着我以上的作法作,就可以認識到 Emacs 牛人其它也很是牛.Emacs 實際上體現了牛人的一種生活方式.

像那些牛人同樣思考,像那些牛人同樣作事,不要懷疑,不要猶豫,很是快你就會發覺本身也開始有些牛人的氣質了.

好比,Sacha Chua 就是這樣一個有牛人氣質的女孩,這是她的 Youtube 錄像. 她學習 Emacs 的方式是 讓 Emacs 本身主動將手冊語音合成,這樣她在房間裏走來走去的時候也可以聽文檔了.

想一想看,這些用 Emacs 的人都是什麼樣的 Geek 啊!因此,我以爲 Emacs 不不過一種工具,它是個社區,一種文化.

對我而言,增長 Emacs 社區讓我學會了謙卑.當我明確了 Emacs 的其樸素的設計思想和其強大的可拓展性後,個人感受是敬畏,因爲我作不出這種軟件.

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

9 答疑

9.1 Steve Purcell 的配置是否有文檔可以參考?

除了 README 外沒有,我主要是經過看 EmacsWiki 和源碼來了解.一個竅門是一般主源碼文件的頭部有使用指南.

9.2 Steve Pucell 的 Emacs 配置需執行 Git 和 subversion,有沒有更簡單的配置?

那麼你可以用 個人配置

  • 去掉了 Git 和 subversion 的依賴.你僅僅要下載個人配置,確保網絡 OK(因第一次啓動 Emacs 會本身主動下載安裝軟件包).
  • 已安裝了拼音輸入法 eim
  • C++ 支持強大,因我還作一些桌面開發

注意,Purcell 是頂尖的 Web 開發人員,他會試用各類最新的 Web 開發技術,假設你用了個人配置,Web 開發插件更新會滯後一段時間.另外個人開發工具鏈和 Purcell 的不全然一致.你本身權衡了.

9.3 該使用Emacs的哪一個版本號

眼下的最新的穩定版是Emacs 24.3.1,建議不要有用高於這個版本號的Emacs.一般你不用操心版本號號的問題.主流的Linux發行版會幫你處理這個問題.

9.4 我已經是 Vi 高手,爲何要轉到 Emacs 來?

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

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

眼下我在用 evil-mode,在 Emacs 下模擬 Vim 操做,結合了二者的長處.簡單地說,現在個人執行模式"神用編輯器之神 ".

警告,Steve Purcell 和我默認都啓用了 Vim 的快捷鍵,假設你不習慣的話,可以打開 ~/.emacs.d/init.el,將當中對應的一行凝視掉,詳細凝視哪一行請參考 README.

9.5 我對於 Emacs 的默認快捷鍵很是不習慣,怎麼辦?

Emacs 的快捷鍵是通過幾十年考驗至關高效的,我建議你在未成爲高手前仍是學習 Emacs 的默認快捷鍵.

假設必定要在 Emacs 下用 Windows 快捷鍵的,可以考慮 ergoemacs.

9.6 Emacs 快捷鍵太多記不住怎麼辦?

沒有必要記快捷鍵,我也僅僅能記住常用的十幾個快捷鍵.順其天然,常用的命令你天然會記住快捷鍵,過一段時間不用了,又會忘掉,這很是正常.

眼下很是多高手在用 Smex,可以飛快輸入命令,很是多快捷鍵實際上不需要了.

9.7 使用牛人的 Emacs 的配置後,發覺界面有些奇怪的 bug,怎麼改?

不要改! 參考上文 站在巨人的肩膀上 一章,你以爲奇怪多是因爲缺少經驗,把某些特性誤以爲是 bug.請堅持至少一年.

好比,有人向我反映,在編輯不論什麼文本的時候,會發覺右邊約第 80 列處總有一豎線,但願能去掉.這其實是一特性,提醒你每一行不要寬度不要超過第 80 列.這裏是 每行不要超過 80 列的緣由.

我建議你學習 Emacs 的第一年的原則應是,理解而不推斷.

9.8 已按指示下載更新軟件包,但是好象沒有不論什麼做用,也沒有不論什麼錯誤信息

刪除 home 文件夾下的 .emacs、~/.emacs.d/init.el 就是代替原來的 .emacs.

9.9 我有不論什麼關於怎樣配置 Emacs 的詳細問題

  • 讀官方教程
  • 善用 google 和我提供的信息

好比,問:在 .emacs.d 中的 init.el 文件起什麼做用?答:google "emacswiki init.el".

9.10 使用牛人的配置後啓動 emacs 報錯,怎樣解決?

首先確認你已裝上了 你需要的 第三方命令行工具,這些工具是可選的,清單見 個人.emacs.d的README.

假設排除了以上緣由. 又一次啓動 emacs,帶上 "–debug-init" 參數,而後將顯示的錯誤信息及環境報告到你所用的.emacs.d相應的開發人員# .

報告 bug 應該給出細節.好比很是多讀者給個人 bug 都是由於第三方插件版本號較新引發的,我拿到版本號號後,才幹下載特定版本號的插件以重現 bug.不然僅僅能靠猜,來回郵件會浪費讀者很是多時間.

9.11 牛人的 Emacs 配置太複雜,不easy掌控,仍是我本身從一個簡單的 .emacs 改起好控制

那麼你就是走我懊悔莫及的老路,一我的在黑暗中摸索.開頭興致很是高,但現實是殘酷的,碰到複雜問題解決不了.因而選擇逃避,最好的藉口是 Emacs 太複雜,放棄 Emacs.

我終於醒悟過來,走上了光明大道,很是多走上岐路的人恐怕就沒有這個覺悟和毅力了.

但願本身掌控坦率地說是一個非技術問題,因爲沒有自信心,因此有一種補償內心. 但願經過一種錯誤的方式來證實本身.結局無非是惡性循環.

正確地方法是放下身段至少一年 (我已重複強調這一點),打好基本功,讀書,虛心地向高手學習.

讓我舉一個樣例說明:有一個讀者向我反映他用了 purcell 的配置,但是 Lisp 的環境花了三天時間也搞不定.儘管我對除 Elisp 之外的其它 Lisp 方言毫無經驗,仍是花了 15 分鐘幫他攻克了這個問題.解決方法很是easy,就是 指定一下用哪一個 Lisp 解釋器.

解決該問題需要的基本功很是easy:

  • 知道管道 (pipe),stdout、stderr 是什麼.這是 Linux 下作系統開發最最主要的知識.
  • 讀文章一開頭推薦的官方 Emacs 教程,知道怎樣使用在線幫助.我解決該問題的關鍵也就是把文檔讀了一下,文檔中已經清楚地說明怎樣設置 Lisp 解釋器
  • 知道怎樣 Google.我知道要設置的變量名後,代碼懶得寫,直接以變量名搜到對應代碼 (一行而已),拷貝粘帖.

9.12 爲何我用了牛人的配置後本身額外加入的插件無效

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

這也是我爲何建議剛開始學習的人直接使用牛人配置的緣由,因爲牛人已經攻克了衆多兼容性的問題,你僅僅要直接享受他的服務便可了.

即便你發覺了牛人還沒有來得及處理的 bug,最有效的方法是提交 bug 報告給牛人,而不是本身去鑽研 elisp.

9.13 我想用 Windows 版本號的 Emacs 而不是 Cygwin 版本號的 Emacs,怎麼作?

需要對主要的命令行操做有必定的熟悉.關鍵知識點有兩個:

  1. 設置 HOME 環境變量,因爲 .emacs.d 中的某些 elisp 腳本假定 .emacs.d 在 HOME 所相應的路徑中.
  2. Emacs 的某些功能需要使用第三方的命令行工具,這些工具的路徑應該加入至環境變量 PATH 中 (可選,緣由見後面).
  3. 替代步驟 2 的還有一更好的方法是使用第三方插件將 Windows 版本號的 Emacs 和 Cygwin 的工具和 文檔 完美結合,參考 我 (redguardtoo) 在 stackoverflow 上的回答.只是需要不少其它的配置.

假設你不知道怎樣在 Windows 下加入改動環境變量,不知道怎樣安裝第三方工具,建議仍是先用 cygwin 中的 Emacs,因爲 cygwin 已自帶某些工具,沒有的話,安裝也和方便.且在 cygwin 下環境變量 HOME 默認已有.

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

9.14 Emacs 在代碼跳轉和代碼本身主動完畢上和商業的 IDE 仍是有差距,有什麼解決方式?

這個差距說到底是後端語法解析引擎的問題.坦率地說一般人們問我這個問題都是以微軟的 Visual Studio 和 Eclipse 做爲參照對象的.

就 C++ 來講眼下有使用蘋果公司的 clang 的方案,效果還不錯.就 Java 來講,有使用 eclipse 作爲後端引擎的方案.詳細使用什麼 Emacs 插件來調用這些引擎有很是多選擇,不展開了.

實戰中,我一般就是使用 ctags 或者 etags 做爲後端引擎,因其所有語言通吃. 儘管解析效果差一點,但是經過我遵循恰當的命名規範,對編程效率沒有什麼影響.

使用 ctags 或者 etags 還可以幫助菜鳥程序猿改掉一個很是嚴重的毛病.菜鳥因爲缺少自信心和經驗,因此變量和函數名的命名一般都過於通用,給本身是架構師在寫一個大型的通用 Framework 的幻覺.這對於真實的產品研發來講是一個很是嚴重的問題,想象你要改動某個接口的所有調用,定義,文檔和測試案例,並且這個接口在多個語言中都有使用.這個接口假設有一個通用的名字如 list,是會把維護人員氣死的 (我之前碰到過一朵奇葩,他還有喜把變量名和函數名叫全然同樣名字的"好習慣 ").叫 ListMySpecificService 則好的多.使用 ctags/etags 這類比較弱的解析引擎就會逼你起一個不那麼普通的名字.

假設ctags已不能知足你的需求,你可以考慮用cscope或者Gnu Global (gtags).

以上我討論的都是後端引擎的問題.

就前端界面來講,作的比較好的是company-mode,眼下維護也很是活躍,你可以就特定語言怎樣配置company-mode諮詢其開發人員.

9.15 爲何 Emacs 啓動時從server (elpa) 安裝第三方軟件包 (package) 會失敗?

請啓動 Emacs 後,執行 `M-x package-refresh-contents` 以從server更新最新的軟件索引,而後從新啓動 Emacs 就能夠.

假設你沒有使用 Emacs 24,並且沒有全然拷貝高手的配置 (這是本文的中心思想),那麼你需要安裝配置 package.el,細節請參考 這裏.

Emacs 下載軟件包 (package) 是經過 http 方式,因此假設網絡出問題的話你需要用 http 代理server,詳細操做見後文.

9.16 有些站點 Emacs 訪問不了 (緣由你懂得)

在命令行中啓動 Emacs 時加上 "http_proxy=your-proxy-server-ip:port" 前綴.

好比,

http_proxy=http://127.0.0.1:8000 emacs -nw

9.17 有些軟件包下載不下來,也不會用代理

那麼就僅僅能使用個人Emacs配置.

和個人配置配套的是我創建的獨立的第三方包服務,請參考其主頁上的README設置.

9.18 掌握 Emacs Lisp 是不是成爲 Emacs 高手的必要條件?

否.但 Emacs Lisp 是很是強大的語言,其特色是一切皆可改動.當我說"一切"的時候,我就是指字面意義上的"一切",並不是修辭上的誇張.

我用過不少編輯器,除了 Emacs 外,沒有一個能作到"一切均可改動"這點 .vi 也不行.

因此學點 Lisp 對於你提升 Emacs 的使用水平沒什麼壞處.另外 Lisp 是種不錯的語言,假設你的職業是 IT 的話,Lisp 值得一學.

順便說一下,Lisp 是種很是easy的學的語言,比 VB easy多了,一旦你適應其語法後,就會發覺它事實上對程序猿蠻友好的,至少少打很是多字.

9.19 早點學習 Emacs Lisp 是否有助於早日成爲 Emacs 高手?

否,僅僅會起阻礙做用!

Lisp語法和一般的編程語言有些不一樣,除非有至關編程經驗(至少10年),通常人剛開始都會對其有語法有一點點負面情緒(固然都是毫無道理的偏見).個人意見是學習不論什麼新東西,長期來講興趣是最重要的.一開始就應該避免不論什麼會消減興趣的不論什麼負面情緒.

Emacs Lisp又是一種僅僅用於Emacs的語言,有大量的Emacs相關的術語需要掌握.如"Buffer","Yank","font face",這些術語僅僅有在你成爲有至關經驗的Emacs使用者後才幹理解.

因此在 Emacs 沒有至關基礎前學習 Emacs Lisp 是在浪費時間.

參考前文關於找到切入點的一節,我推薦的學習 Lisp 的順序是,先使用優秀的 Emacs 配置享受到 Emacs 的優勢,有了興趣後學習 Emacs Lisp 就水到渠成了.

9.20 Emacs 基本操做我會了,下一步學些什麼比較迷茫

關鍵是你打算用 Emacs 這個強大的瑞士軍刀作什麼.

我在前文中已經強調過以興趣和解決實際問題做爲切入點.

再舉一些我本身的樣例說明:

  • 我有寫博客需要,懶得用 wordpress 那個破界面,因此用 org2blog
  • 開發 ruby on rails 程序需要 IDE,裝了 rinari
  • 作跨平臺 C++ 桌面開發,裝了 cmake-mode.
  • 我要開發巨型項目 (需要在多個文件夾窗體間跳來跳去),因此裝了 window-numbering.el.
  • 巨型項目需要我同一時候調試多種語言,因此我裝了 evil-nerd-commenter,這樣不用記住特定語言的語法就可以 comment/uncomment 代碼.

9.21 org-mode 該怎樣學習?

Org-mode簡明手冊 是不錯的中文教程.

我以爲最好的英文新手教程是Carsten Dominik(org-mode發明者)在google tech talks上的演講.其要點爲org-mode本質是一個文本文件,你僅僅要記住按TAB展開或者縮進條目就可以了.其它高級特性可以慢慢學.

9.22 對於"一切都用Emacs來完畢"的觀點你怎麼看?

我很是讚揚這個理念.但是不要走火入魔.Emacs本質是個平臺,給geek們提供了無限的可能性.

但是從有用角度講,Emacs和其它工具結合有時候能更快完畢工做(只是菜鳥在沒有一年的修煉以前千萬不要猜Emacs*不能*作什麼).

下面是我以爲不必定Emacs能夠吃獨食的地方:

  • 剪貼簿操做應結合命令行工具xsel(Linux)/pbpaste(OSX)/putclip(Cygwin)
  • Web瀏覽最好用Firefox結合插件如keysnail
  • 遠程登陸管理最好用screen/tmux
  • FTP最好用專門的FTP軟件
  • 文件管理用專用軟件

緣由多種多樣,比方遠程ssh登陸使用Emacs的話,Emacs默認假定你是不能訪問X clipboard的,但是這個假定現在不成立,假設你使用X11 forward over ssh技術(主流的Linuxserver默認都支持的),剪貼板是可以訪問的.

因此重點是保持頭腦靈活,堅信Emacs無所不能的同一時候也要適當變通一下.

10 聯繫我

這是個人 twitter google plus 以及 微博,也可以經過個人 email<chenbin DOT sh AT GMAIL DOT COM>聯繫我.我也在新浪 weibo.com 上開通帳號 emacsguru.

個人主力博客爲 http://blog.binchen.org.

我不會回答 Emacs 配置的詳細問題,因爲假設你通讀本文,應該知道哪裏找答案更好.

11 結語

在本文結束時,我再強調一下本文最重要的觀點.

要點是:

  • 以*基於解決實際問題*產生的興趣引導
  • 全然照抄*世界頂尖高手*如Steve Purcell的配置,儘可能避免研究本身怎樣配置Emacs,固然也儘量少寫Elisp代碼.
  • 學習Emacs和學習不論什麼一種專業技能(拉小提琴,解數學題)的方法論都是同樣的,請參考 一萬小時天才理論.

關鍵是你以嚴肅的態度把其看成專業技能學習. 很是多人之因此不贊同個人核心觀點多是因爲在他們的心裏深處仍是有把Emacs用來炫耀"我有多酷"的意識.

Emacs固然很是強大,可以做爲一種另類娛樂工具來博得眼球.但是它的本質是爲專業人士使用的神器.

讓我打個例如,職業殺手對於殺人的刀僅僅關心兩件事:

  1. 高效地殺人
  2. 不論什麼環境下均可靠

刀的裝飾是否美麗或者用刀技巧是不是本身原創的對職業殺手並不重要.

Emacs就是那把刀.

11.1 怎樣報bug

本文已放在 GitHub 上,網址爲 https://github.com/redguardtoo/mastering-emacs-in-one-year-guide.

假設有不論什麼疑問,請在以上網址報 bug.這比 Email 要快.因GitHub會以郵件通知我,GitHub 郵件永遠歸類至個人最優先目錄下.

假設直接給我發 Email,就會淹沒於垃圾郵件中.

11.2 不要複製粘帖本文

Emacs 本質上是一個社區和平臺,不斷有新的有趣的人和技術出現.我會按期更新本文.

假設你僅僅是拷貝粘帖全文,會使你本身和他人錯過更新.

我建議你最好分享本文的連接,

相關文章
相關標籤/搜索