Emacs 101 新手求生指南 - 一本讓你學 Emacs 不再學得靠北靠母的美好的新手求生指南
** 一些懺悔 這是寫完這本小書的三年後對於這本書的懺悔。
用了也六年的 Emacs、寫過十幾個 Emacs 外掛,我想現在的我應該有點資格說這些話。
不瞞各位說,我自己用 Emacs 的機會越來越少了。原因無他,就是 Emacs 在寫程式這點確實比不上 VSCode 了,跳到 VSCode 三個月後,我的日常工作裡 Emacs 只拿來做寫程式以外的任務(Magit, serial-term 之類的),而且完全不會懷念用 Emacs 寫程式,轉換的陣痛期也出乎意料的小 -- VSCode 的優勢實在太多了,感謝上帝讚美拯救蒼生的微軟。
在你決定學習 Emacs 之前,就讓我幹譙一下 Emacs,目前在 Emacs 裡面搞過 C++, Python, JavaScript, TypeScript 的自動補全與重構(其實搞過的開發環境不只這幾種語言,但這幾種語言我都有寫了一定的時間比較理解),都很難搞,而且最終弄出來的效果也都沒有 Qt Creator / PyCharm / VSCode 好(大概差了八九六四個光年吧),不是常常罷工、甚至根本卡頓到不堪用。就算只是想寫個 web,vue, scss, pug / jade 和 stylus 這幾個需要的 major-mode 我都直接自幹要不然也 hack 過,現有的都超難用要不然就是 bug 滿天飛,搞了兩三年發現用 VSCode 隨便滑鼠點一點裝好 plugins 還不用動設定的開發環境都比目前Emacs上各式現有package與自己土炮出來的好用太多...
就算以上都順利裝好、TypeScript 支援就是沒 VSCode 強大(lsp-mode 是完全跑不起來,eglot-mode 則是極度卡頓、一直把你的按鍵輸入吃掉挑戰你的 EQ 底線)、C/C++ 支援就是沒有 QtCreator 或 VisualStudio 那樣的行雲流水(更別說現在有 clang 語意分析加持的 QtCreator 跟那好用到爆的 UI 搭配)。你可能會說這些本來就不是編輯器該做的事情、Emacs 不是 IDE...但畢竟我是要工作寫程式不是在玩遊戲啊,工作效率才是最重要的,我根本不想管 Emacs 定位是編輯器還是 IDE。
就算只是編輯器好了,舉個實際例子:我常常在寫 pug/jade,但現有的 jade-mode 和 pug-mode 都充滿缺陷到讓人訝異(因為在這之前我沒有寫過這類型的 major-mode, 後來頭洗下去研究才發現這兩個 mode 的作者根本連 syntax-table / =modify-syntax-entry= 的參數意義都理解得一塌糊塗),因為實在受不了所以花費了幾個禮拜寫了 [[https://github.com/kuanyui/yajade-mode.el#known-bugs][yajade-mode]] (同時也寫了 [[https://github.com/kuanyui/cakecrumbs.el][cakecrumbs.el]] 來輔助),沒寫不知道,一寫才發現原來 Emacs 對 syntax 的支援是如此...簡陋,以至於後來發現除非你真的像 =js2-mode= 那樣自己寫 lexer / parser 自己上色,否則 pug/jade 的支援就是無解。
後來試試 VSCode,一裝好,哇好流暢的自動補全啊(Company 實在有夠慢),哇code 不用外掛就可以折疊耶、哇 TypeScript 補全超聰明還會自動 import 耶、哇寫 Vue 時編輯器可以直接理解