我從兩年前開始用 Emacs——我通常用它來寫文章(包括目前這篇)、寫程式、問 AI 問題,使用體驗非常好。但是,我周圍的人幾乎都不理解——他們覺得 Emacs 很慢、老、而且很奇怪(可能最後一點是對的)。
所以,我想來說說我使用 Emacs 作為主力 text editor (和系統)的理由。

Emacs 允許你做任何你想要的事——真的,就是字面上的意思。
你有權利修改 Emacs 裡的任何東西。對,任何!
比起普通的 text editor,Emacs 更像是一個可以任意客製化的作業系統。別的 editors(VSCode、Sublime Text、Helix)隱藏了許多內部細節,讓使用者只能修改特定配置。使用者也很難直接看到 plugins 背後的運作原理 & source code(除非是 open source),更別提更改這些 plugins 了。但在 Emacs 中,使用者能定製幾乎一切、見到 plugins 的 source code。
Emacs Lisp (Elisp)是 Emacs 的核心和魅力所在。Emacs Lisp 是 Emacs 的 configuration language,是一個完整的程式語言,也是 Emacs 和其他編輯器差異最大之處。
一般的 text editor(比如 VSCode、Sublime Text、Zed)通常是 out of box,安裝完即可使用,configuration language (通常是 JSON、TOML)的存在是為了讓使用者小修小改。想開發自己的 plugin? 可以,但你得用另外一個語言(Python、JavaScript)。
Emacs 則不然。Emacs 的 core 為一個由 C 寫成的 Emacs Lisp interpreter,剩下所有的功能都是用 Emacs Lisp 寫成的。而 Emacs 也讓你能用 Emacs Lisp 隨意調整 Emacs,一切細節都公開透明。對於你不喜歡的預設功能,你總可以用 Emacs Lisp 改個變數、跑個 function 修改(或自己從頭寫!)。只要五分鐘,任何人都能輕鬆寫出一個 package & 使用。
而且自從教主 RMS (Richard Stallman)在 1984 年開發出 GNU Emacs 第一版以來,Emacs Lisp 幾乎沒有太大的改動——這代表你二十年前用 Emacs Lisp 寫的 package 到現在還能用!舉個現實的例子,目前 Emacs 最有名的 package Org Mode 便是二十年前一個教授所寫的。
過去二十年來,無數 Emacs 高手寫了優秀、強大的 package。這些 package 很多都放在 MELPA 上,只要 M-x package-install package 就可以安裝使用。這些 package 就只是一個個 Emacs Lisp file,所以你也可以更改、研究背後的功能。只要你電腦上有 Emacs,這些 package 都能用一輩子!
如果你願意花點時間(大概一個小時)學習 Emacs Lisp,你就能隨心所欲寫出你想要的 plugin。只要五分鐘,你就能寫一個很簡單的功能加到 Emacs 裡。
我在 Emacs 中裝了個能使用 Gemini、ChatGPT 等 LLM 的 package gptel,讓我能高效使用 LLM。但有個問題:我沒辦法輕鬆管理 prompts。所以,我花了一個多小時簡單寫了個小 function,完美解決這個問題。這個 function 會去 .emacs.d/misc/prompts 下抓所有 txt 檔(每個 txt 檔都是一個 prompt),載入到 gptel 中,之後我只要稍微按幾個鍵就能切換 system prompt。
只要花幾個小時投入,你就能獲得一個真正屬於你的 text editor。

Emacs 作爲歷史最悠久的現存 editor,無數 Emacser 爲 Emacs 開發了 packages。其中不少 packages 能讓 Emacs 使用體驗上和 VSCode、JetBrains IDE 毫無區別,甚至有過之而無不及。
LSP Mode 可以讓 Emacs 獲得如同 VSCode 的 completion 體驗,輕鬆打造 C/C++/Python/JavaScript IDE。
Org Mode 自成一家,足以替代 Notion、Obsidian 等一衆筆記軟體。
gptel 能讓你同時用 GPT、Claude、Gemini 等 models,並將對話存成 Markdown 檔案。
Magit 讓 Git 變得方便無比,再也不用記憶複雜的指令。
在其他 editors 中,你很難找到如此豐富、強大的 plugins,但這一起在 Emacs 中都有。
而且不少優秀 packages 可以互相搭配,達到 1+1 > 2 的效果。Company Mode 是一個 completion frontend,能根據檔案類型提供不同的 completion。我設定了 company-ispell,讓 Emacs 可以 auto-complete 英文單字。而 Writeroom-mode 讓 Emacs 變得像 Typora 一樣簡潔,搭配上 company-ispell,Emacs 就變成一個好用的 Markdown Editor。
一個配置好的 Emacs 可以是:

Programming 需要極高的專注力,所以 Editor 必須儘可能減少不必要的干擾,讓 Programmer 能進入「心流」狀態——腦中只有螢幕上的程式,隨時將心中的想法透過鍵盤輸入,化諸一行行 code。若想進入如此狀態,一個不仰賴滑鼠的環境不可或缺。如果一個 Editor/IDE 讓 Programmer 頻繁在滑鼠/鍵盤兩者間切換,Programmer 就無法輕易進入「心流」。
Emacs (和宿敵 Vim)皆是上個世紀文字介面時代的產物,所以你使用 Emacs 時可以完全不碰滑鼠,純粹依靠鍵盤來輸入、移動,達到極高的編輯效率。而這也是很多高手喜歡 Vim/Emacs 的原因——一切都能使用鍵盤操作,減少不必要的心理負擔,讓人可以更專注在程式本體。
網路上有不少人批評 Emacs 傷手——這實際上也算事實,Emacs 內建的快捷鍵真的不是給一般人用的——又多又雜,而且幾乎沒有啥規律——C-x C-c 是退出、C-x C-s 是存檔、C-x b 是切換 buffer(類似其他 editor 的 tab)。儘管也有不少 Emacser 喜歡原生的 keybindings,但我想對大部分人而言,如此的操作方式讓人卻步。
但是有一群 Emacs hacker 寫了 Evil 。Evil 讓你可以在 Emacs 用 Vim 的 keymaps(我知道聽起來有點邪教),體驗上和 Neovim/Vim 幾乎毫無差異!而 general.el 可以實現 Vim 中的 leader keys,設定上比 Neovim/Vim 那套方法更好理解。
我目前的 Emacs 就定義了好幾個 shortcuts:
SPC f f 搜尋檔案SPC m s 開啟 Magit (一個 Git 前端)SPC g g Ripgrep 搜尋特定關鍵字SPC c p 編譯、輸入測資、執行 C++ 程式(競程)再舉個例子,我時常使用 Gemini、ChatGPT 問程式問題。
在 VSCode 中,如果我想打開 GitHub Copilot 問問題,我必須用滑鼠打開右邊的 tab、輸入 prompt、再用滑鼠複製回答。
但在 Emacs 中,我可以直接 SPC g p 開一個空的 chat、輸入完問題按 C-C <return> 得到答案,再用 Emacs keymap 複製答案。整個過程不用滑鼠,也快上不少。
試試看 Emacs 吧。可以用用看我的 emacs.d,或是用成熟的 configuration (比如 Doom Emacs)。
你會喜歡上 Emacs 的 :)