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

 

一年成爲Emacs高手(像神一樣使用編輯器)作者:陳斌(redguardtoo)

版本號:20150122

更新時間:<2015-01-22 Thu>

原創時間:<2012-01-31 Tue>

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

簡介

成爲高手很容易.當初我在Vi陣營,偶爾用Emacs還忘記”退出”的快捷鍵,但一年後我跨入高手行列.

很多文章強調Emacs有多牛,但關於”如何做”則語焉不詳,即使涉及到”如何做”,談細節多而方法論少,所以本文就側重方法論.

全文結構如下:

  • 爲什麼Emacs值得學習,如你對開源文化熟悉可跳過這一章,否則至少讀一下態度一節
  • 本文最核心觀點,要充分利用高手成果,不要重新發明輪子
  • 儘快掌握Emacs的步驟
  • 進一步提高的提示(社區,閱讀,知識管理)
  • 跳出具體Emacs技巧,重要的是人
  • 答疑和小結

爲什麼用Emacs(可選)

簡單談談,因重點是”怎麼做”,不是”爲什麼”.

真正精通後Emacs,其他編輯器自然精通

一旦嘗過最好的,你自然瞭解好的編輯器應該有哪些功能.

比如一個內嵌的插件管理器是最基本的.

如下載了第三方插件,如果發覺其有問題,可以在不碰該插件原始代碼的情況下修復.

插件服務器關閉了,應可以在自帶的U盤上快速建立鏡像.

目前流行的編輯器如Sublime Text還做不到以上幾點.

Emacs 的特點決定了其社區水準不低

Emacs 用 Lisp 開發,Lisp 不同尋常的語法決定了其開發者都是資深開發者,掌握了多門語言.

Lisp 並不能給你帶來任何好處,所以其社區成員都是純粹的技術愛好者,投機取巧的功利主義者對其沒有興趣.

和IDE比較,Emacs 做的更多更快

IDE針對特定語言或框架優化,而Emacs完成通用任務更有效.

例如,我碰到難題,需要上 IRC 請教國外高手 (工作流是,粘貼代碼到http://gist.github.com, 在irc提問,看網頁,將解決方案粘貼回來),Emacs 集成了 IRC 工具和瀏覽器 (w3m),操作就很方便.

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

當然口說無憑,請看高手操作的 youtube 視頻, Emacs Power: Can your editor do THIS!

順便說一下,很多初學者關心的代碼自動完成,幾門主流語言支持都不錯(包括java).

Emacs會永存

個人開發者會喪失興趣,公司會倒閉.但自由軟件基金會將一直存在下去.Emacs 作爲其招牌軟件也會維護下去,我的投資永不會貶值.

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

軟件開源,配置是純文本,且資源消耗小,安裝包很小 (命令行版本 30M 左右),任何環境下都可用.

這在大項目中特別有益,例如,某項目需同時編輯 Perl, Java,C, Bash, SQL, 要編輯遠程服務器上的代碼,網速不快. Emacs的優勢就體現出來了.

一年指的是一年中的空閒時間

我沒說一年內須什麼事都不幹專學Emacs, 我最反對沒有短期回報的懸樑刺股.

我利用一年中通勤時間就取得了很大進步,自信到可以寫下本文.

態度決定一切

重要的是頭腦開放,不先入爲主.

新手的問題是,開始就 盲目 設定了入門必知.有些必知還很費時間.

以我爲例,

具體步驟

在正式開始前,我需要解釋後文會用到的命名慣例,

  • “C” 表示按下Ctrl鍵,”M”表示按下Alt鍵
  • “M-x my-command”表示同時按下”Alt”和”X”, 輸入”my-command”,然後回車

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

建議,

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

這個階段的目的是:

  • 理解Emacs可愛之處
  • 知道Emacs如何和其他軟件交互

讀官方教程

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

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

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

最起碼要知道以下命令,

  • “M-x describe-variable”, 快捷鍵”C-h v”, 查看變量的文檔
  • “M-x describe-function”, 快捷鍵”C-h f”, 查看命令的文檔
  • “M-x describe-key”, 快捷鍵 “C-h k”, 查看快捷鍵的文檔

以實際問題作爲切入點

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

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

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

反面例子是很多人以啃Lisp教程開始他們的Emacs之旅,堅持下來的人寥寥無幾.

待解決的問題設定優先度

關鍵在於理性地考慮你最迫切需要解決的一個問題.

以這個問題作爲出發點,除此之外都可以妥協.

雖然Emacs無所不能,但是飯也要一口一口吃.有時候退一步進兩步.

例如,我一直以爲Emacs的中文顯示很完美,所以搞不懂爲什麼有人會在字體配置上花那麼多時間.在陸續接到反饋後,我才明白原來是因爲我一直在終端下使用Emacs,終端軟件可以完美顯示中文字體,所以就沒Emacs什麼事了.需要配置字體的人用的是圖形界面Emacs.

當初只在終端下使用Emacs是因爲需連接到遠程服務器.我認爲這是重點.甚至爲此放棄了漂亮的配色主題(後來發覺此犧牲毫無必要).

塞翁失馬,由此也避免了圖形界面版本的所有問題.

站在巨人的肩膀上

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

這是浪費時間!

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

警告,Purcell 總愛試用最新的 Web 開發的新技術,對他而言穩定性不是第一位的,如果你有熱情和能力,願意一起折騰,那麼水平會提高很快.

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

如你不願折騰,那至少不要重複我的錯誤,不要質疑,不要創新,跟着高手做.比如 Eric Schulte 的 Emacs-starter-kit 很適合初學者.Bozhidar Batsov 的配置 也不錯 (不一定適合初學者).也可用 我的配置.

直說了把,你是初學者,開始階段應以模仿爲主.這點怎麼強調也不過分!

爲了加深印象,讓我再舉一例.有人向我反映,Emacs 快捷鍵太多,背起來壓力很大.我的建議是,拿高手配置來用,而不是強加給自己背快捷鍵這樣無聊的任務.你會發覺高手已安裝了名爲smex 的插件,使直接輸入命令比快捷鍵還快.

如果你還未信服,請再考慮一下我的理由:

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

報bug

像武俠小說那樣拜高手爲師是白日做夢.唯一能讓高手指點的辦法是先付出.最可靠的付出就是報bug.

我就是這樣學到一些高級Lisp技巧的.

不要有報bug低級的想法.很多高手都是樂於且善於報bug.到是菜鳥喜歡重新發明輪子.

幫助高手,你的起點就高,還有得到指點的好處.

持續改進

前提是起點高,要在高手已有工作上改善.即使是微小的改善,如果堅持一段時間,就是巨大的進步了,你就可以在這一點上笑傲江湖.

再找出另一高手需要改善的地方,使用同樣的方法.

例如,默認在Emacs中移動子窗口焦點不是很方便.需按”C-x O”多次.我找到了emacs插件switch-window,只要按”C-x O”一次,會有提示子窗口編號,接下來只要輸入編號就可以了.但還有改善空間,我又找到了window-number.el,只要按”M-NUM”就可以了.

window-number.el已完美,但Alt鍵還是有點慢,我結合evilevil-leader,可以按逗號和數字飛速切換子窗口了.

加入社區更上一層樓

最重要的是專一.

例如,Quora.com上有很多有趣的話題.請剋制興趣,不去定閱和Emacs無關的話題.

Google Plus是最好的

Google Plus 此時氣場很強,貼子質量高.我上過很多社區,沒有比它更好的了.例如,我加入了 Linkedin和Facebook的Emacs論壇,目前都退出了.不是它們不專業,只是Google Plus討論技術層次較高.

如你只能加入一個社區,那就是Google Plus了.

GitHub 是 geek 雲集的地方

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

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

Emacs牛人的博客

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

Quora.com

我偏愛的是”列舉最有用的命令”之類的具體問題.很多回答大開眼界.即使我已精通Emacs.

那種”如何入門”的問題,人人都能插上一腳.即使有高水平的回答,也淹沒在衆多平庸回答中.

如果你的問題就是比較泛泛而談的,從一個能測量水準的具體問題入手找到高手,然後看高手是如何回答那些比較泛的問題的.

在 twitter 上以 “emacs :en” 定期搜索

twitter人多,更新結果快.

之所以加上”:en”是因爲要排除日文內容.

在 stackoverflow 上搜索相關討論

google “emacs-related-keywords site:stackoverflow.com”

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

到 Youtube 上看 emacs 相關的視頻

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

不過Youtube搜索結果是最佳匹配的.由於相關視頻並不多,如按照默認算法,每次總是那幾個.所以如果關注最新進展,搜索應以時間排序.

讀書最有效

EmacsWiki

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

有人抱怨文檔太亂,質量參差不齊.前者我有同感.後者不贊同.EmacsWiki文檔質量相當高,因其是 唯一的 半官方文檔.耐心忍受其亂中有序的現狀吧.

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

Emacs Lisp 書籍推薦(可選)

Bob Glickstein的Writing GNU Emacs Extensions是最好的.

生動,例子豐富.作者用心安排了書的結構.例如,很早就介紹了defadvice的用法.defadvice 是Emacs Lisp的精華.

Xah Lee 提供付費Lisp教程也相當不錯.

Steve Yegge的Emacs Lisp教程

他的Emergency Elisp很簡潔.我特別喜歡”Statements”一章.

知識管理

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

正面例子參考Steve Purcell的配置. 2000年開始14年的維護! 8年github記錄! 1000多顆星的配置決非浪得虛名.

知識積累的越多,這些知識之間的聯繫就會越多.聯繫增長的速度是以指數的方式增長的.如從頭來過,意味着積累的知識的書面記錄丟失了.損失是很大的.基數已歸零,增長的量又能有多少.

所以決不要重置配置!

這也是後文談到爲什麼要用工具保存配置和知識.

配置納入 github 的版本控制

我的配置見 https://github.com/redguardtoo/emacs.d.

版本控制可以是認爲一個集中式的知識管理,任何時刻任何地點對配置的修改都要及時上傳合併 (merge).這點是積累能力的關鍵.

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

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

我將所有資訊都放在 dropbox 的服務器上,這樣資料就同步到我的智能手機和我的平板電腦上,我可利用空閒時間學習.

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

我還寫了許多博客文章.這些文章都存在org格式的文件中.最後發佈的靜態博客也納入版本控制,參見http://github.com/redguardtoo/blog.binchen.org.

第三方插件推薦

初學者的問題是裝了太多插件,管理成了問題.

我建議的原則是少而精,被少數最優秀的插件培養出品味後,可自由挑選適合的.

標準如下:

  • 高品質
  • 常更新
  • 很強大

所有插件都可通過包管理器下載.

以下是清單:

名稱 說明 同類插件
Evil 將 Emacs 變爲 vim viper
Org org-mode,全能的 note 工具 沒有
company-mode 自動完成輸入,支持各種語言和後端 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 語法解釋器 js-mode
w3m Emacs 的網絡瀏覽器(需安裝命令行工具w3m) Eww
elnode elisp 寫的 Web 服務器 不知道
smartparens 自動輸入需要成對輸入的字符如右括號之類的字符 autopair
window-numbering.el 跳轉到不同的子窗口 switch-window.el
web-mode 支持各種 HTML 文件 nxml-mode, html-mode

Emacs 是一種生活方式

意思是說,牛人其他也很牛.舉一反三你收穫會很多.

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

我現在有意識地整理高手名單,觀察他們 除了Emacs外 用什麼工具.

例如, js2-mode 的維護者Masafumi Oyamada(網名mooz)也開發了keysnailpercol. 特別是percol,使我命令行效率提高了10倍.

這個階段可稱之爲 心中有劍,手中無劍.

是否用Emacs不重要了,重要的是隨心所欲.例如,很多人爭論哪個編輯器自帶的文件管理較好.我從mooz那學到大招後,就跳出五行外,不在三界中了.

答疑

我是絕對菜鳥,該怎麼開始

https://github.com/redguardtoo/emacs.d 參考”Install stable version in easiest way”一節.

你只要點擊下載兩個zip文件就可以了,不需要git的任何知識.

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

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

高手的配置是否太重量級?

從性能和資源消耗的角度來講,高手的配置都是輕量級的.因爲他們知道如何優化.

比如Emacs有一種叫Autoload的技術. 只有當你用到模塊的某一功能時那個模塊纔會被載入內存. 我推薦的高手都知道這類技巧.

有沒有更簡單的配置?

可用 我的配置

  • 去掉了Git依賴.
  • 網絡也不是必須的
  • 已安裝了拼音輸入法
  • C++ 支持強大

注意,Purcell作爲頂尖Web開發者,會試用各種最新的Web技術,而我的配置Web類插件更新會滯後一段時間.另外我的工具鏈和Purcell不完全一致.你自己權衡了.

該使用Emacs的哪個版本

目前穩定版是Emacs 24.3.1,建議不要用高於此版本的Emacs.通常不用擔心版本問題.主流的Linux發行版會處理.

24.4雖然已發佈,但還有些小問題,我建議再等半年左右.也也就是說,2015年下半年可以考慮升級.

我已是Vi高手,爲什麼要轉陣營?

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

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

目前我用Evil, 在Emacs下模擬Vim,結合兩者優點.

現在我是 神用編輯器之神!

警告,Steve Purcell和我默認都啓用了Vim的快捷鍵,不習慣可打開~/.emacs.d/init.el,將其中一行代碼註釋掉,細節參考README.

不習慣默認快捷鍵,怎麼辦?

!

默認快捷鍵經過幾十年考驗,相當高效,未成爲高手前還是用默認快捷鍵.

如一定要在用 Windows 快捷鍵的,可考慮 ergoemacs.

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

沒必要記,我也只記常用的十幾個快捷鍵.順其自然,多用自然記住,不用就忘掉,很正常.

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

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

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

例如,有人反映右邊第80列處總有一豎線,希望能去掉.

實際上這是一特性,提醒用戶一行寬度不要超過第80列. 這是 每行不要超過 80 列的原因.

我建議第一年應 儘量理解而不妄加判斷.

已下載更新軟件包,但是沒有任何作用,也沒有任何錯誤信息

刪除HOME目錄下的”.emacs”, “~/.emacs.d/init.el”就是取代原來的”.emacs”.

任何關於如何配置的問題

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

例如, 問:在 .emacs.d 中的 init.el 文件起什麼作用? 答:google “emacswiki init.el”.

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

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

如排除了以上原因,帶上”–debug-init”參數重新啓動,然後將錯誤信息及環境報告到對應的開發者.

報告時應給出細節.例如很多讀者給我的bug都是由於第三方插件版本較新引起的,我拿到版本號後,才能下載特定版本已重現 bug.否則只能靠猜,來回郵件浪費很多時間.

牛人的配置太複雜,不易掌控,還是從一簡單的配置改起好控制

那你就是走我後悔莫及的老路,一個人在黑暗中摸索.開頭興致很高,但現實是殘酷的,碰到複雜問題解決不了.只能逃避,藉口Emacs太複雜,放棄了.

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

希望自己掌控坦率地說是一個非技術問題,因爲沒有自信心,所以有補償心態. 希望通過一種錯誤的方式來證明自己.結局無非是惡性循環.

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

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

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

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

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

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

需對命令行操作熟悉.關鍵知識點有兩個:

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

替代步驟2的更好方法是用第三方插件將 Windows 版本的 Emacs 和 Cygwin 的工具完美結合,參考 我 (redguardtoo) 在 stackoverflow 上的回答.不過需更多配置.

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

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

Emacs 在代碼跳轉和自動完成上和商業IDE有差距,怎麼辦?

這個差距說到底是後端語法解析引擎的問題.通常這個問題都是以微軟的Visual Studio和IBM的Eclipse作參照.

就C++來說目前有用蘋果公司的 clang 的方案,效果不錯.Java有用 eclipse 做爲後端引擎的方案.具體用什麼插件來調用這些引擎有很多選擇,不展開了.

實戰中,我通常就用ctags作爲後端引擎,因其通吃所有語言. 雖然解析效果差一點,但是恰當的命名規範(儘量少重名)可以彌補.

如ctags不滿意,可考慮用Gnu Global (gtags).

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

就前端界面來說,做的比較好的是company-mode,維護很活躍,你可就特定語言如何配置諮詢其開發者.

網頁瀏覽

強烈建議用Keysnail.

這是最佳的,我已試過 所有 可選項.

郵件

我用Gnus. 但有很多其他方案.

如你必須訪問Microsoft Exchange Servers, 還要用Davmail.

用了Davmail後, 還可以用Popfile 來分撿郵件. Davmail+Popfile讓我生活在天堂,如果你在那種每天要收到幾百電郵的公司工作,你就懂我的意思了.

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

請啓動 Emacs 後,運行 `M-x package-refresh-contents` 以從服務器更新軟件索引,然後重啓 Emacs 即可.

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

Emacs 下載軟件包 (package) 是通過 http 方式,所以如果網絡出問題的話你需要用 http 代理服務器,具體操作見後文.

有些網站 Emacs 訪問不了 (原因你懂得)

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

例如,

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

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

那麼就只能使用我的Emacs配置.

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

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

否,只會起阻礙作用!

Lisp語法和通常的語言不同,除非有相當編程經驗(至少10年),一般人都會對其有一點負面情緒(當然是毫無道理的偏見!).學習任何新東西,長期來說興趣最重要.一開始應避免任何負面情緒.

Emacs Lisp又是一種只用於Emacs的語言,有大量術語需要掌握.如”Buffer”,”Yank”,”Font face”,只有資深用戶才能理解.

所以在軟件使用沒有相當基礎前學習其拓展語言是浪費時間.

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

有世界級高手(名字不點了)對我的建議不以爲然,他說Lisp很強大很有趣,應該先學.

但是他的盲點在於,忘記了自己轉向Emacs前在其他編輯器上(如Sublime之類)已是一覽衆山小了.他用Python拓展Sublime已熟到厭煩,Lisp的奇特語法反而刺激了興趣.編輯器的常用術語也不在話下. 而本文針對的是大多數的凡人.

選擇適合自己的路,一年以後天才也好,凡人也好, 達到的高度都是一樣的.

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

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

我用過許多編輯器,除了Emacs沒有一個能做到”一切可改”這點 .vim也不行.

所以學點Lisp對提高Emacs水平沒壞處.另外Lisp語法不錯,值得程序員一學.

順便說一下,Lisp很簡單,比VB容易多了,一旦你適應其語法,就會發覺它其實對程序員蠻友好的,至少少打很多字.

有必要學習鍵盤宏(Keyboard Macros)嗎?

沒必要,Lisp足夠了.

基本操作我會了,下一步學什麼迷茫中

關鍵是你打算用這把瑞士軍刀做什麼.

前文已強調過以興趣和解決實際問題作爲切入點.

舉一些我自己的例子說明:

  • 我有寫博客需要,懶得用Wordpress那個破界面,所以用org2blog
  • 開發Ruby on Rails程序需要IDE,裝了 rinari
  • 做跨平臺C++桌面開發,裝了cmake-mode
  • 需在多個子窗口間跳來跳去,所以裝了window-numbering.el
  • 大項目需同時調試多種語言,所以裝了evil-nerd-commenter,這樣不用記特定語言的語法就可註釋掉代碼.

如何學習org-mode?

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

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

對於”一切都用Emacs來完成”的觀點你怎麼看?

我欣賞這個理念.但是不要走火入魔.Emacs本質是個平臺,提供了無限可能性.

從實用角度講,Emacs和其他工具結合有時能更快完成工作(不過在沒有一年的修煉之前 千萬不要猜Emacs不能做什麼).

以下是Emacs不一定能吃獨食的地方:

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

重點是頭腦靈活,堅信Emacs無所不能,偶爾也適當變通.

聯繫我

這是我的 Twitter Google Plus 以及 微博,也可通過我 email<chenbin DOT sh AT GMAIL DOT COM>聯繫我.我在新浪 weibo.com 上開通賬號 emacsguru.

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

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

結語

再強調一下本文最重要的觀點:

  • 基於解決實際問題產生的興趣引導
  • 完全照抄世界頂尖高手如Steve Purcell的配置,儘量避免自己寫Lisp
  • 學習Emacs和 學任何專業技能(拉小提琴,解數學題)的方法論都是一樣的,請參考一萬小時天才理論.

關鍵是你以嚴肅的態度把其當作專業技能學習.

很多人之所以不贊同我的核心觀點,是因爲內心深處還有把Emacs當玩具用來炫耀”我有多酷”的意識.

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

讓我打個比方,職業殺手對於殺人的刀只關心兩件事:

  1. 高效地殺人
  2. 任何環境下都可靠

刀的裝飾是否漂亮或技巧是否自己原創對他並不重要.

Emacs就是那把刀.

如何報bug

本文官方網址爲 https://github.com/redguardtoo/mastering-emacs-in-one-year-guide.

如有任何疑問,請在以上網址報bug.這比Email快.因GitHub會以郵件通知我,GitHub郵件永遠歸類至我的最優先文件夾下.

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

不要複製粘帖本文

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

如果你拷貝粘帖全文,會使自己和他人錯過更新.

我建議分享本文的鏈接,

發佈了62 篇原創文章 · 獲贊 8 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章