Emacs 內建功能:原生 Emacs 中的進階生產力工具
Emacs 包含大量內建工具,但由於可發現性(discoverability)的問題,這些工具往往被忽視。對於 Emacs 28.1+ 的使用者來說,有許多「內建即用」(batteries included)的功能,可以在不需要第三方套件的情況下,提供進階的文本處理、檔案管理和視窗控制。
進階檔案與目錄導航
find-file 與 dired 中的萬用字元(Wildcards)允許進行大量檔案操作與過濾檢視。
使用者可以在 find-file (C-x C-f) 中互動式地使用萬用字元(例如 *foo*.txt)來同時開啟多個檔案。同樣地,當使用 Dired 開啟目錄時,指定檔名萬用字元會產生僅符合該模式的檔案清單。這對於清理暫時性的構建產物(build artifacts)或開啟特定子集的專案檔案特別有用。
ffap-menu 提供整個 Buffer 的檔案路徑與 URL 索引。
雖然 ffap (find-file-at-point) 會開啟游標下的路徑,但 ffap-menu 會掃描整個 Buffer 中任何看起來像檔案路徑或 URL 的字串,並將它們呈現在 completing-read 介面中。這讓使用者能夠透過單一動作,過濾並開啟文件中發現的所有連結或檔案。
進階文本比較與 Diff
compare-windows 是一個輕量級、與上下文無關的工具,用於發現兩個視窗之間的差異。
與 Ediff 等複雜的 diff 工具不同,compare-windows 僅從各自的游標位置開始比較兩個視窗中的文本,並跳轉到第一個不匹配之處。它不在乎 Buffer 是否為檔案、目錄清單,或是同一個 Buffer 在兩個不同面板中顯示。它可以透過將游標置於兩個 Dired 視窗中的相同檔案上,來比較目錄內容(包括修改時間)。
dired-compare-directories 實現了基於屬性的檔案比較。
此命令會提示輸入第二個目錄,並標記兩個清單之間不同的檔案。它支援自定義匹配謂詞(predicates),允許使用者根據特定屬性(如修改時間 mtime 或檔案大小)來標記檔案。
highlight-changes-mode 提供未儲存修改的即時視覺回饋。
此模式會高亮顯示自模式啟動以來已變動的文本。透過將其掛載到 before-save-hook 與 after-save-hook,使用者可以建立一個「高亮未儲存內容」的工作流,讓變動在 Buffer 儲存到磁碟之前都保持視覺上的強調。
系統級工具與導航
dictionary-tooltip-mode 實現了懸停時即時顯示單字定義。
當啟用(連同 tooltip-mode)時,懸停在單字上會透過 tooltip 顯示其含義,通常利用本地字典或 Wiktionary 來處理當代術語。
scroll-all-mode 同步所有 Frame 的捲動。
此模式確保 Frame 內的所有視窗同時捲動。當在不使用完整 Ediff 會話的情況下,並排比較兩個版本的檔案時,這非常有效。
emacs-lock-mode 防止意外刪除 Buffer 或退出編輯器。
鎖定 Buffer 可以防止它被 kill 掉,並防止 Emacs 退出,直到鎖定被解除。這對於維持 Shell Buffer 或編譯輸出(compilation outputs)的狀態非常有用,以免遺失內容。
**undelete-frame-mode 允許恢復已關閉的 Workspace。
**如果啟用,M-x undelete-frame 可以恢復多達 16 個最近刪除的 Frame,並保留關閉的 Workspace 的佈局與 Buffer。
特殊編輯與佈局工具
**kmacro-edit-lossage 將最近的按鍵紀錄轉換為可編輯的 Macro。
**k 模式與 subword-mode 以及 superword-mode 為程式設計重新定義了單字邊界。
**subword-mode 將 CamelCase 符號的組成部分視為獨立單字,而 superword-mode 將 snake_case 符號視為單個單字。此外,使用者可以透過 modify-syntax-entry 修改 Major Mode 的語法表(syntax table),將特定字元(如 :)包含在單字的一部分中,以改善 Lisp-like 語言的導航導航。
**ruler-mode 提供互動式的邊距與 fill-column 調整。
**ruler-mode 模式允許使用者透過滑鼠互動(Shift+Click 並拖曳)來設定左、右邊距與 fill-column,提供比手動設定變數更直覺的開發方式來管理文件寬度。
幫助與原始碼發現
apropos 系列工具提供針對函數、變數與選項的專用化查詢。
除了標準的 apropos,Emacs 還包含 apropos-function、apropos-function、apropos-command 與 customize-apropos。後者會產生一個自定義的 Buffer 進行瀏覽與更改所有符合搜尋術語的選項。
**find-function-on-key 提供從按鍵綁定直接到原始碼的捷徑。
**find-function-on-key 命令允許使用者直接跳轉到綁定在特定按鍵上的函數 Lisp 定義,跳過先描述按鍵再跳轉到原始碼的步驟。
社群的觀點:關於 Emacs 的可發現性問題
雖然這些功能的強大程度很高,但 Emacs 社群對於「可發現性問題」仍有分歧。
"The biggest problem Emacs has will not be solved by blog posts like this... If Emacs 核心的體驗可以更強大,Emacs 需要更好的開箱即用體驗... 這也意味著捨棄 'vanilla Em-acs 僅限於原生 Emacs 使用者' 的清高地位。"
有些使用者說,主要問題不在於可發現性可發現性,而是在於穩定性。當在添加「內建即用」功能時,-borking- 也不會影響對高度自定義環境的使用者來說是一個重要的摩擦點。對於那些偏好高度自定義環境而非原生安裝的使用於使用者,這是一個重要的摩擦點