本篇文章更新時間:2026/03/11
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
兩年純內建 Emacs 的修行:從一份 init.el 到 35 個自製模組的演化
副標題:讀《Two Years of Emacs Solo》有感
編輯前言:原文由 Rahul Juliato 撰寫,完整文章可見:Two Years of Emacs Solo: 35 Modules, Zero External Packages, and a Full Refactor。這篇文章讓我重新思考:如果有一天,所有外部套件都消失,我的 Emacs 還能正常工作嗎?
核心觀點 (Key Takeaways)
- Emacs 本身比大家想像的更強大,許多功能其實已內建,只是沒被好好配置。
- 自己動手寫模組,是學習 Elisp 與掌握配置的最佳方式。
- 將內建配置(Core)與自製擴充(Extras)拆開,可以大幅提升可維護性與可分享性。
深入解析
Rahul 的 Emacs Solo 有一個狂熱、甚至有點「苦行僧」的前提:不使用任何外部套件。沒有 MELPA、沒有 straight.el、沒有用 use-package :ensure t 安裝任何東西。一切都必須是 Emacs 內建,或他親手寫的模組。
文章的重點在於,他不只是做到「不用外部套件」而已,而是將整份配置重新拆分為兩層:
-
Layer 1:init.el(純內建配置)
只調校 Emacs 已經內建的功能,並用清楚的區段標示各種內建套件如 Dired、VC、Eshell、Eglot、Icomplete 等的設定。任何人都能直接複製貼上,完全不會出現依賴問題。 -
Layer 2:lisp/(自製 35 個模組)
這些模組是他嘗試模仿、重寫、精簡外部套件的「自製替代品」,例如簡化版的 ace-window、rainbow-delimiters、sudo-edit、diff-hl、olivetti、exec-path-from-shell 等。全部獨立、短小、容易閱讀,可以直接複製到自己的 lisp 資料夾使用。
Rahul 強調:
「我寫的模組不追求功能完整,只追求每日使用時『夠用』。」
這種「小而美」的精神貫穿整篇文章,也是 Emacs Solo 的靈魂所在。
-
拆分配置的好處
他的反思很值得借鏡:原本上千行的 init.el,難以理解、難以複製、難以分享。分類後不但開發速度變快,也讓使用者更容易理解某段程式碼究竟是在調整內建功能,還是在加入外部邏輯。 -
35 個自製模組的亮點
模組列表非常豐富,我印象最深的包括: -
自製色彩主題系統(基於 Modus)
-
完整的 mode-line 重寫
-
Eshell 加強(共用歷史、客製化提示、多樣 prompt)
-
自製 Git gutter、Dired gutter
-
Emacs 版 Docker/Podman 管理 UI
-
YouTube 搜尋 + yt-dlp 播放器
-
AI 後端整合(Ollama、Gemini、Claude)
光是 YouTube 播放模組與容器管理 UI,我就覺得已足以成為一個獨立專案。
筆者心得與啟發
讀完這篇文章,我最大的感觸是:
我們習慣把 Emacs 推向「高度 MEP(MELPA-External-Package)依賴」的方向,但 Emacs 其實天生就是一個 Operating Environment,而不是純文字編輯器。
Rahul 做的事情,讓我開始反思自己的 Emacs 使用方式:
- 我是不是太快仰賴外部套件,而忽略了內建功能的潛力?
- 我是否真的理解自己的工具,還是只是在抄別人的配置?
- 如果我從來不自己寫模組,我永遠沒機會理解 overlay、child-frame、process filter、tabulated-list-mode 之類的核心概念。
他的「純內建修行」雖然不一定適合所有人,但卻是一種非常值得借鏡的思考方式。
我尤其欣賞他說的這句話:
「當你深入到需要寫 polyfill 的程度,你也深入到足以為 Emacs 送出 patch 的程度。」
這是一個對開源社群非常健康、正向的循環:理解 → 重寫 → 改進 → 回饋。
對我來說,這篇文章最大的啟發是:
或許我們都可以從「減法」開始,重新審視自己的 Emacs。
減少依賴、簡化邏輯、理解內建功能,讓自己的配置逐漸成為可維護、可掌控、甚至可分享的作品。
Emacs Solo 是一個實驗,但也是一個提醒:
你永遠可以寫出你自己的 Emacs,而不是借別人的。
