疑惑🤔:Emacs为什么迷人?

歡迎新人

非大佬,但以前也寫過這類問題的回答:

但我以前的回答比較抽象,具體到特定的功能的話……我先問下 AI:Emacs 有什麼 vim/vscode/neovim 等沒有的常用功能嗎?

ChatGPT 的回答放到最後,我覺得總結得還不錯,自己再補充一些:

  1. wdired 這類,把某個命令的結果當作 text 編輯、保存、生效,可以極爲容易地批量修改文件名、在多多文件中替換文本等

  2. emms 等,直接在 emacs 中做各種音樂播放的處理,例如從 dired 中選中後直接生成 playlist 播放 → 在一個插件中積累的經驗往往可以在使用另一個插件時疊加,類似的例子如 magit commit 時用 flyspell 做拼寫檢查,而 flyspell 又可以做很多配置……company、yasnippet 等同理

  3. org-mode 和其生態,例如 org-capture 隨時記錄想法、org2blog 把文章輕鬆發佈到 wordpress、org-publish 制作靜態網站(又可以利用 pandoc 轉成 epub 電子書)、與 gpg 結合成爲日記軟件(直接編輯 gpg 文件好像是 emacs 特有的)、與 orgzly (Android)結合作爲手機筆記軟件(電腦端、移動端一體的知識管理系統、calendar 系統)、org-remark 作爲閱讀筆記軟件(我把電子書轉成 html,然後用 hack 過的 eww 打開,再用 org-remark-eww-mode,而因爲 Android Emacs 的存在,同樣的方案在手機上也能用,產生的筆記是純文本,便於搜索、直接看)……

  4. keepass mode 作爲一個簡單的鍵盤操作的 keepass 密碼管理器

  5. 基於拼音首字母、雙拼字母等搜索(我是用 pyim 實現的)

  6. 輸入法,我用魔然(自然碼的一個變體),加上 emacs-rime 的探針之類的功能,文字錄入體驗甚佳

  7. lisp 編程的體驗大概是最好的?至少是之一

  8. gdb-many-windows + eglot + citre,對我偶爾 hack C/C++ 而言很好用 → 非特別優勢,只是說我需要的功能 emacs 能做到

  9. elfeed(RSS 訂閱)、email、IRC、Telegram、Matrix 等

這個列表可以列很長,單是 org-mode 就還有很多,但我想最主要的是:

  1. emacs 本質上是一個 lisp machine,幾乎想改什麼改什麼,改完立刻可以驗證,對於 hack 一些自己想要的功能非常便宜
  2. 很多功能一旦掌握了,就可以與其他功能疊加使用(應用於同一抽象層),在使用的過程中又對這些已經掌握的功能變得更熟悉,一次投資,長遠收益,而且是複利
  3. 長久以來積累了很多好用的功能

這三者相輔相成,互相促進


ChatGPT 的回答:

有,而且是結構性差異,不是插件能完全補齊的那種。重點如下:


1. 同一語言(Elisp)貫穿「用/改/擴」

  • Emacs 的配置、命令、插件、即時改行為,全是 Emacs Lisp
  • 不是「寫配置」而是「改正在跑的程式」。
  • Vim/Neovim:Lua/Vimscript + 外部插件邊界明顯 VS Code:API + JSON + TypeScript,重啓/Reload 成本高

結果:Emacs 能做到 live system hacking


2. 真正的「可編程編輯器」,不是插件平台

  • 任何操作=函數=可組合

  • 任意命令可:

    • 記錄(kmacro)
    • 改寫
    • 掛 advice
    • 動態替換

在 Vim/VSCode,很多核心行為是「不可攔截黑盒」。


3. Org-mode:不是 TODO,而是一個 DSL

Org-mode 是 Emacs 獨有,且不可被等價複製

  • 文檔 = 結構化資料

  • 同時是:

    • 任務管理
    • 筆記系統
    • 表格 / 輕量資料庫
    • Literate programming(Babel)
    • 發佈系統(HTML / PDF / EPUB)

VS Code / Vim 的 markdown + 插件 ≠ Org-mode。


4. Magit:Git 的「語義級 UI」

  • 不是「git 命令包一層 UI」
  • 是把 Git 抽象成操作狀態機
  • 每個操作可回溯、可組合、可精確控制

很多資深 Git 用戶在 Emacs 才「真正理解 Git」。


5. Buffer ≠ 檔案(核心觀念差異)

  • Emacs 操作的是 buffer
  • 檔案、shell、REPL、log、diff、help 都是 buffer
  • 同一套鍵位 / 編輯模型適用所有東西

VS Code / Vim:

  • 檔案是核心
  • 其他東西是「面板」「特殊視圖」

6. 長時間運行的個人計算環境

  • Emacs 常年不關
  • 累積狀態、歷史、上下文
  • 像一個「個人 OS 內核」

Vim/Neovim 偏 session VS Code 偏 project lifecycle


7. 非文本任務也能「一等公民化」

  • Email(mu4e / notmuch)
  • IRC / Matrix / Telegram
  • RSS
  • 日程
  • 文件管理
  • 甚至 window manager(EXWM)

不是「整合」,是「同一抽象層」。


一句話總結

Vim / Neovim / VS Code:高效的編輯器 Emacs:一個你可以隨時間「長成自己形狀」的可編程系統

如果你只是「寫代碼」→ 不一定需要 Emacs 如果你想把 寫作 / 研究 / 任務 / 思考 / 系統操作 合成一個可演化工具 → Emacs 幾乎唯一選擇

5 个赞