Emacs/Emacs 哲學
UNIX 工具的設計者經常談論 UNIX 哲學:“一個工具應該只做一件事,而且要做好”。UNIX 開發人員喜歡他們簡潔、強大、命令列工具,他們可以以無數種方式將這些工具串聯起來。
然後是 Emacs,儘管它擁有值得稱道的 UNIX 根源,但它卻因其龐大的自然而受到嘲笑:坐在你旁邊的諷刺的 vi 使用者可能會想出關於你使用 Eight-meg Memory use Constantly Swapping 作業系統(在它之上實現了一個平庸的編輯器)的陳詞濫調。
然而,我認為 Emacs 確實很好地體現了 UNIX 哲學。
我認為早期的 UNIX 哲學家忘記了在他們的指南中新增一些東西。對於命令列工具來說,這太隱含了,很容易忽略,但在你使用互動式的東西時,它會變得更加明顯。
他們應該說的是:“做好一件事... 而且還要是圖靈完備的”
你說什麼!?一個工具怎麼能既只做一件事,又能做所有事呢?好吧,事情是這樣的... 做好一件事很好,但你的行為並不孤立存在,你的工具必須與其他工具互動才能完成你的整體任務。
在命令列中,這很容易,如果你想讓你的 grep 命令傳送郵件,你只需像這樣透過管道傳輸到郵件
grep root /etc/shadow | mail dave@haxxor.net
但是,一旦你開始以互動方式做事,事情就會變得困難。輸入和輸出不再是簡單的字元流,而是複雜的事件交織模式。
在這個環境中,管道的模擬是應用程式指令碼語言。為了真正滿足 UNIX 哲學,你必須具有高度的可擴充套件性。因此,我們遇到了
這就是我們理解 emacs 的方式。一個試圖在 UNIX 哲學中儘可能簡單,但也高度可擴充套件的文字編輯器。
現在,可擴充套件性並不是 emacs 獨有的功能。許多工具都有外掛框架和指令碼。但 emacs 有點不同
- 它的指令碼語言 emacs lisp 易於使用,許多與編輯器的互動形式都是作為語言級功能實現的
- 儘可能多的功能都是使用這種可擴充套件性語言實現的
- 提供了許多功能來幫助你與 emacs lisp 互動,而且,日常活動鼓勵你與 emacs lisp 互動。
Emacs 是一個以可擴充套件指令碼為核心的編輯器,而不僅僅是作為外掛編寫者才能理解的後續想法。