這應該算第三次使用Emacs了。第一次是在2009年,NOI 2009醬油後下決心好好學習Linux,Philip Xu前輩我指引了兩天,發現Linux這個未知世界竟然有這麼多好玩的軟件。編輯器之神Vim用了一陣子了,NOIP 2009前若干天開始探索神的編輯器Emacs,使用Emacs Lisp配置,實現與Vim相似的設定效果需要多出好多代碼,因此不久又回到Vim。大概2010下半年又用起Emacs,這次好好折騰了一把。當時Vim的插件生態還是在vim.org(現在更多的是GitHub),Emacs倒是有個,嘗試了Mew、ERC、AUCTeX、haskell-mode、org-mode等好多東西。很多插件工作得良好,比起Vim的對應物,質量高些。
GTK+的Emacs是個富文本編輯器,每個字符都可以有不同的樣式,而GVim的字符大小是統一的,在UI表現能力上弱於Emacs。AUCTeX充分利用了Emacs的這個優勢,解析TeX中粗體、斜體、大字號、小字號等標記,用相應的樣式顯示,一目瞭然。Google Images中搜索AUCTeX有很多圖片例子。另外Emacs也可以內嵌圖片,公式片段作爲圖片渲染,這可是個殺手級特性。prettify-symbols-mode,Vim也有conceal,但是由於字體顯示的缺陷,不能很好發揮。
Emacs有時被人詬病爲一個缺乏好的編輯器的操作系統。誠然,收郵件、上IRC、內置終端模擬器、各種網站客戶端,網上能找到很多插件賦予它做各式各樣任務的能力。我2012年第二次棄用Emacs是因爲我認爲作爲“操作系統”的Emacs扮演了很多窗口管理器的角色,我已經配置好了xmonad,這些任務應該交給xmonad。這次轉換失去了好多,haskell-mode、tuareg-mode、erlang-mode,這些major-mode比Vim下的對應物出色很多。Emacs能作爲操作系統的競爭力來自於它是個優秀的Lisp交互式編程環境,活着的Lisp Machine。求值光標前的代碼、查詢快捷鍵綁定、查閱函數文檔,這些Vim的插件們都沒做好。
major-mode往往會與外部程序通信,並用適當形式在Emacs中顯示。如下圖,錄色底色部分爲已經執行過的命令,階段性結果顯示在下方buffer中。Emacs中很多major-mode勝過Vim中filetype插件的重要一點就是REPL能力。
另外minor-mode控制功能模塊的載入和取消比Vim使用autocommand和filetype檢測方便。Minor-mode的設計着實高明。
自package.el誕生以來Emacs的包管理生態也逐漸好轉。第二次放棄Emacs時還有很多插件散落在網上各地,如今逐步被ELPA等倉庫收納。現在包管理的選擇太多,el-get、cask、quelpa……選擇太多有些時候不是好事。
但和編輯以外的附件功能Vim始終不如Emacs,比如repl環境、文件管理、筆記管理等。GTK的Emacs是個富文本編輯器,甚至還可以包含圖片;而GVim仍很接近終端Vim。Emacs比起Vim有幾個顯著的強項:
感謝最近的awesome-*系列項目,全方位介紹各種領域的插件。https://github.com/emacs-tw/awesome-emacs,透過其中的Starter Kit可以快速學習優秀配置,構建起適合自己的系統。
evil-mode是Vim模擬層,Emacs終於有了一個好的編輯器,使我對兩大編輯器的評估只需要關注編輯功能以外的生態環境。Emacs的感覺稍好,所以就切換,感謝evil-mode,轉換不至於太困難。