為什麼我喜歡 Emacs
我是一個典型的 Emacs 用戶。不是我選擇的 Emacs,而是它選擇了我。早在我剛開始學習 Unix 的時候,我偶然發現了一個奇怪的名為 Emacs 的應用程序,它隱藏在我的電腦上,其中有一個鮮為人知的功能。傳說中(而且被證明是真的),如果你在終端上輸入 emacs
,按 Alt+X
,然後輸入 tetris
,你就可以玩一個掉方塊的遊戲。
![Tetris in Emacs](/data/attachment/album/202012/15/234235gmueejjdj0edzhmm.png "Tetris in Emacs")
那就是我對 GNU Emacs 的印象。雖然這很膚淺,但它也準確地表明了 Emacs 的意義:用戶可以重新編程他們的(虛擬)世界,並且可以用一個應用程序做任何他們想做的事情。在你的文本編輯器中玩俄羅斯方塊可能不是你日常的主要目標,但這說明 Emacs 是一個值得驕傲的編程平台。事實上,你可以把它看作是 Jupyter 的一種先驅,它把一種強大的編程語言(準確的說叫 elisp)和自己的實時環境結合起來。因此,Emacs 作為一個文本編輯器是靈活的、可定製的、強大的。
如果你習慣於 Bash、Python 或類似的語言,elisp(以及擴展的 Common Lisp)不一定是最容易入門的語言。但是這種 LISP 方言是很強大的,而且因為 Emacs 是一個 LISP 解釋器,所以你可以用它構建應用程序,不管它們是 Emacs 插件還是你想開發成一個獨立項目的原型。極其流行的 org 模式項目就是一個例子:它是一個 Emacs 插件,同時也是一個標記語法,有移動應用可以解釋和擴展其功能。類似的有用的 Emacs 內應用的例子還有很多,包括電子郵件客戶端、PDF 瀏覽器、Web 瀏覽器、shell 和文件管理器。
兩個界面
GNU Emacs 至少有兩個用戶界面:圖形用戶界面(GUI)和終端用戶界面(TUI)。這有時會讓人感到驚訝,因為 Emacs 經常與運行在終端中的 Vi 相提並論(儘管 gVim 為現代 Vi 的實現提供了一個 GUI)。如果你想把 GNU Emacs 以終端程序來運行,你可以用 -nw
選項來啟動它。
$ emacs -nw
有了 GUI 程序,你可以直接從應用程序菜單或終端啟動 Emacs。
你可能會認為 GUI 會降低 Emacs 的效率,好像「真正的文本編輯器是在終端中運行的」,但 GUI 可以使 Emacs 更容易學習,因為它的 GUI 遵循了一些典型的慣例(菜單欄、可調節的組件、滑鼠交互等)。
事實上,如果你把 Emacs 作為一個 GUI 應用程序來運行,你可能在一天的時間裡會完全沒有意識到你在 Emacs 中。只要你使用過 GUI,大多數常用的慣例都適用。例如,你可以用滑鼠選擇文本,導航到編輯菜單,選擇複製,然後將游標放在其他地方,選擇粘貼。要保存文檔,你可以進入文件,然後選擇保存或另存為。你可以按 Ctrl
鍵並向上滾動,使屏幕字體變大,你可以使用滾動條來瀏覽你的文檔,等等。
了解 Emacs 的 GUI 形式是拉平學習曲線的好方法。
Emacs 鍵盤快捷鍵
GNU Emacs 以複雜的鍵盤組合而惡名遠揚。它們不僅陌生(Alt+W
來複制?Ctrl+Y
來粘貼?),而且還用晦澀難懂的術語來標註(Alt
被稱為 Meta
),有時它們成雙成對(Ctrl+X
後是 Ctrl+S
來保存),有時則單獨出現(Ctrl+S
來搜索)。為什麼有人會故意選擇使用這些呢?
嗯,有些人不會。但那些喜歡這些的人是因為這些組合很容易融入到日常打字的節奏中(而且經常讓 Caps Lock
鍵充當 Ctrl
鍵)。然而,那些喜歡不同的東西的人有幾個選擇:
- 「邪惡」模式讓你在 Emacs 中使用 Vim 鍵綁定。就是這麼簡單。你可以保留你的肌肉記憶中的按鍵組合,並繼承最強大的文本編輯器。
- 通用用戶訪問(CUA)鍵保留了所有 Emacs 常用的組合鍵,但最令人頭疼的鍵(複製、剪切、粘貼和撤消)都被映射到現代的鍵盤綁定中(分別為
Ctrl+C
、Ctrl+X
、Ctrl+V
和Ctrl+Z
)。 global-set-key
函數,是 Emacs 編程的一部分,允許你定義自己的鍵盤快捷鍵。傳統上,用戶定義的快捷鍵以Ctrl+C
開頭,但沒有什麼能阻止你發明自己的方案。Emacs 並不敝帚自珍,歡迎你按照自己的意願來扭轉它。
學習 Emacs
要想很好地使用 Emacs 是需要時間的。對我來說,這意味著列印出一張速記表,每天都把它放在鍵盤旁邊。當我忘了一個鍵組合時,我就在我的速記表上查找它。如果它不在我的速記表上,我就學習這個鍵盤組合,要麼通過執行該函數,並注意 Emacs 告訴我如何更快地訪問它,要麼通過使用 describe-function
:
M-x describe-function: save-buffer
save-buffer is an interactive compiled Lisp function in 『files.el』.
It is bound to C-x C-s, <menu-bar> <file> <save-buffer>.
[...]
當你使用它的時候,你就會學習它。你對它了解得越多,你就越有能力去改進它,使它變成你自己的。
嘗試 Emacs
人們常開玩笑說 Emacs 是一個包含文本編輯器的操作系統。也許這是在暗示 Emacs 臃腫和過於複雜,當然也有一種說法是文本編輯器根據其默認配置不應該需要 libpoppler
(你可以不需要它來編譯 Emacs)。
但這個笑話背後潛藏著一個更大的真相,它揭示了 Emacs 如此有趣的原因。將 Emacs 與其他文本編輯器,如 Vim、Nano,甚至 VSCodium 進行比較是沒有意義的,因為 Emacs 真正重要的部分並不是你可以在窗口中輸入東西並保存的這種思路。那是連 Bash 都能提供的基本功能。Emacs 的真正意義在於它如何將控制置身於你的手中,以及如何通過 Emacs Lisp(Elisp)解決幾乎任何問題。
via: https://opensource.com/article/20/12/emacs
作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive