10個(gè)讓你進(jìn)入Emacs世界的技巧
10 個(gè)技巧,讓你深入這個(gè)有用的開源文本編輯器的世界。
很多人都說想學(xué) Emacs,但很多人在短暫的接觸后就退縮了。這并不是因?yàn)? Emacs 不好,也不是 Emacs 復(fù)雜。我相信,問題在于人們其實(shí)并不想“學(xué)習(xí)” Emacs,而是他們想習(xí)慣 Emacs 的傳統(tǒng)。他們想了解那些神秘的鍵盤快捷鍵和不熟悉的術(shù)語。他們想按照他們認(rèn)為的“使用目的”來使用 Emacs。
我很同情這一點(diǎn),因?yàn)槲覍?Emacs 的感覺就是這樣。我以為真正的 Emacs 用戶都只會在終端里面運(yùn)行,從來不用方向鍵和菜單,更不會用鼠標(biāo)。這是個(gè)阻止自己開始使用 Emacs 的好辦法。有足夠多的獨(dú)特的 .emacs
配置文件證明,如果說 Emacs 用戶有一個(gè)共同的變化,那就是每個(gè)人使用 Emacs 的方式不同。
學(xué)習(xí) Emacs 很容易。愛上 Emacs 才是最難的。要愛上 Emacs,你必須發(fā)現(xiàn)它所擁有的功能,而這些功能是你一直在尋找的,有時(shí)你并不知道你已經(jīng)錯(cuò)過了它們。這需要經(jīng)驗(yàn)。
獲得這種經(jīng)驗(yàn)的唯一方法就是從一開始就積極使用 Emacs。這里有十個(gè)小提示,可以幫助你找出最適合你的方法。
從 GUI 開始
Emacs(以及它的友好競爭者 Vim)最偉大的事情之一是它可以在終端中運(yùn)行,這在你 SSH 進(jìn)入服務(wù)器時(shí)很有用,但在過去 15 年來制造的計(jì)算機(jī)上意義不大。Emacs 的 GUI 版本可以在極度低功耗的設(shè)備上運(yùn)行,它有很多實(shí)用的功能,無論是新手還是有經(jīng)驗(yàn)的用戶都可以使用它。
例如,如果你不知道如何在 Emacs 中只用鍵盤快捷鍵復(fù)制一個(gè)單詞,編輯菜單的復(fù)制、剪切和粘貼選擇提供了最輕松的路徑。沒有理由因?yàn)檫x擇了 Emacs 而懲罰自己。使用它的菜單,用鼠標(biāo)選擇區(qū)域,點(diǎn)擊緩沖區(qū)內(nèi)的按鈕,不要讓陌生感阻礙你的工作效率。
Emacs slackware
這些功能被內(nèi)置到 Emacs 中,是因?yàn)橛脩粼谑褂盟鼈儭D銘?yīng)該在你需要的時(shí)候使用它們,而當(dāng)你最終在 VT100 終端上通過 SSH 使用 Emacs,沒有 Alt
或方向鍵的時(shí)候,你才應(yīng)該使用這些晦澀的命令。
習(xí)慣術(shù)語
Emacs 的 UI 元素有著特殊的術(shù)語。個(gè)人計(jì)算的發(fā)展并不是建立在相同的術(shù)語上,所以很多術(shù)語對現(xiàn)代計(jì)算機(jī)用戶來說比較陌生,還有一些術(shù)語雖然相同,但含義不同。下面是一些最常見的術(shù)語。
- 框架。在 Emacs 中,“框架”就是現(xiàn)代計(jì)算機(jī)所說的“窗口”。
- 緩沖區(qū):“緩沖區(qū)”是 Emacs 的一個(gè)通信通道。它可以作為 Emacs 進(jìn)程的命令行,也可以作為 shell,或者只是一個(gè)文件的內(nèi)容。
- 窗口:“窗口”是你進(jìn)入一個(gè)緩沖區(qū)的視角。
- 迷你緩沖區(qū)。它是主要的命令行,位于 Emacs 窗口的底部。
Emacs tutorial map
讓 Emacs 的修飾鍵變得更有意義
在 PC 鍵盤上,Ctrl
鍵被稱為 C
,Alt
鍵被稱為 M
,這些鍵并不是 C
和 M
鍵,由于它們總是與相應(yīng)的字母或符號鍵配對,所以在文檔中很容易識別。
例如,C-x
在現(xiàn)代鍵盤符號中的意思是 Ctrl+X
,M-x
是 Alt+X
。就像你從任何應(yīng)用程序中剪切文本時(shí)一樣,同時(shí)按下這兩個(gè)鍵。
不過,還有另一個(gè)層次的鍵盤快捷鍵,與現(xiàn)代電腦上的任何東西都完全不同。有時(shí),鍵盤快捷鍵并不只是一個(gè)鍵組合,而是由一系列的按鍵組成。
例如,C-x C-f
的意思是像往常一樣按 Ctrl+X
,然后再按 Ctrl+C
。
有時(shí),一個(gè)鍵盤快捷鍵有混合的鍵型。組合鍵 C-x 3
意味著像往常一樣按 Ctrl+X
,然后按數(shù)字 3
鍵。
Emacs 之所以能做到這些花哨的強(qiáng)力組合,是因?yàn)槟承╂I會讓 Emacs 進(jìn)入一種特殊的命令模式。如果你按 C-X
(也就是 Ctrl+X
),就是告訴 Emacs
進(jìn)入空閑狀態(tài),等待第二個(gè)鍵或鍵盤快捷鍵。
Emacs 的文檔,無論是官方的還是非官方的,都有很多鍵盤快捷鍵。在心里練習(xí)把 C
鍵翻譯成 Ctrl
鍵,M
鍵翻譯成 Alt
鍵,那么這些文檔對你來說都會變得更有意義。
剪切、復(fù)制和粘貼的備用快捷方式
從規(guī)范上,復(fù)制文本是通過一系列的鍵盤快捷鍵進(jìn)行的,這些快捷鍵取決于你想要復(fù)制或剪切的方式。
例如,你可以用 M-d
(Alt+d
的 Emacs 行話)剪切一整個(gè)單詞,或者用C-k
(Ctrl+K
)剪切一整行,或者用 M-m
(Alt+M
)剪切一個(gè)高亮區(qū)域。如果你想的話,你可以習(xí)慣這樣,但如果你喜歡 Ctrl+C
和 Ctrl+X
和 Ctrl-V
,那么你可以用這些來代替。
啟用現(xiàn)代的“剪切-復(fù)制-粘貼”需要激活一個(gè)名為 CUA(通用用戶訪問)的功能。要激活 CUA,請單擊“選項(xiàng)”菜單并選擇“使用 CUA 鍵”。啟用后,C-c
復(fù)制高亮顯示的文本,C-x
剪切高亮顯示的文本,C-v
粘貼文本。這個(gè)模式只有在你選擇了文本之后才會實(shí)際激活,所以你仍然可以學(xué)習(xí) Emacs 通常使用的 C-x
和 C-c
綁定。
用哪個(gè)都好
Emacs 是一個(gè)應(yīng)用程序,它不會意識到你對它的感情或忠誠度。如果你想只用 Emacs 來完成那些“感覺”適合 Emacs 的任務(wù),而用不同的編輯器(比如 Vim)來完成其他任務(wù),你可以這樣做。
你與一個(gè)應(yīng)用程序的交互會影響你的工作方式,所以如果 Emacs 中所需要的按鍵模式與特定任務(wù)不一致,那么就不要強(qiáng)迫自己使用 Emacs 來完成該任務(wù)。Emacs 只是眾多可供你使用的開源工具之一,沒有理由讓自己只限于一種工具。
探索新功能
Emacs 所做的大部分工作都是一個(gè) elisp 函數(shù),它可以從菜單選擇和鍵盤快捷鍵調(diào)用,或者在某些情況下從特定事件中調(diào)用。所有的函數(shù)都可以從迷你緩沖區(qū)(Emacs 框架底部的命令行)執(zhí)行。理論上,你甚至可以通過鍵入 forward-word
和 backward-word
以及 next-line
和 previous-line
等函數(shù)來導(dǎo)航光標(biāo)。這肯定是無比低效的,但這就是一種直接訪問你運(yùn)行的代碼的方式。在某種程度上,Emacs 就是自己的 API。
你可以通過在社區(qū)博客上閱讀有關(guān) Emacs 的資料來了解新函數(shù),或者你可以采取更直接的方法,使用描述函數(shù)(describe-function
)。要獲得任何函數(shù)的幫助,按 M-x
(也就是 Alt+X
),然后輸入 describe-function
,然后按回車鍵。系統(tǒng)會提示你輸入一個(gè)函數(shù)名稱,然后顯示該函數(shù)的描述。
你可以通過鍵入M-x(
Alt+X),然后鍵入
?` 來獲得所有可用函數(shù)的列表。
你也可以在輸入函數(shù)時(shí),通過按 M-x
鍵,然后輸入 auto-complete-mode
,再按回車鍵,獲得彈出的函數(shù)描述。激活該模式后,當(dāng)你在文檔中鍵入任何 Emacs 函數(shù)時(shí),都會向你提供自動補(bǔ)完選項(xiàng),以及函數(shù)的描述。
Emacs function
當(dāng)你找到一個(gè)有用的函數(shù)并使用它時(shí),Emacs 會告訴你它的鍵盤綁定,如果有的話。如果沒有的話,你可以通過打開你的 $HOME/.emacs
配置文件并輸入鍵盤快捷鍵來自己分配一個(gè)。語法是 global-set-key
,后面是你要使用的鍵盤快捷鍵,然后是你要調(diào)用的函數(shù)。
例如,要將 screenwriter-slugline
函數(shù)分配一個(gè)鍵盤綁定:
(global-set-key (kbd “C-c s”) 'screenwriter-slugline)
重新加載配置文件,鍵盤快捷鍵就可以使用了:
M-x load-file ~/.emacs
緊急按鈕
當(dāng)你使用 Emacs 并嘗試新的函數(shù)時(shí),你一定會開始調(diào)用一些你并不想調(diào)用的東西。Emacs 中通用的緊急按鈕是 C-g
(就是 Ctrl+G
)。
我通過將 G 與 GNU 聯(lián)系起來來記住這一點(diǎn),我想我是在呼吁 GNU 將我從一個(gè)錯(cuò)誤的決定中拯救出來,但請隨意編造你自己的記憶符號。
如果你按幾下 C-g
,Emacs 的迷你緩沖區(qū)就會回到潛伏狀態(tài),彈出窗口被隱藏,你又回到了一個(gè)普通的、無聊的文本編輯器的安全狀態(tài)。
忽略鍵盤快捷鍵
潛在的鍵盤快捷鍵太多,在這里無法一一總結(jié),更不希望你能記住。這是設(shè)計(jì)好的。Emacs 的目的是為了定制,當(dāng)人們?yōu)?Emacs 編寫插件時(shí),他們可以定義自己的特殊鍵盤快捷鍵。
我們的想法不是要馬上記住所有的快捷鍵。相反,你的目標(biāo)是讓你在使用 Emacs 時(shí)感到舒適。你在 Emacs 中變得越舒適,你就越會厭倦總是求助于菜單欄,你就會開始記住對你重要的組合鍵。
根據(jù)自己在 Emacs 中通常做的事情,每個(gè)人都有自己喜歡的快捷方式。一個(gè)整天用 Emacs 寫代碼的人可能知道運(yùn)行調(diào)試器或啟動特定語言模式的所有鍵盤快捷鍵,但對 Org 模式或 Artist 模式一無所知。這很自然,也很好。
使用 Bash 時(shí)練習(xí) Emacs
了解 Emacs 鍵盤快捷鍵的一個(gè)好處是,其中許多快捷鍵也適用于 Bash。
C-a
:到行首C-e
:到行尾C-k
:剪切整行M-f
:向前一個(gè)字M-b
:向后一個(gè)字M-d
:剪切一個(gè)字C-y
:貼回(粘貼)最近剪切的內(nèi)容M-Shift-U
:大寫一個(gè)詞C-t
:交換兩個(gè)字符(例如,sl
變成ls
)
還有更多的例子,它能讓你與 Bash 終端的交互速度超乎你的想象。
包
Emacs 有一個(gè)內(nèi)置的包管理器來幫助你發(fā)現(xiàn)新的插件。它的包管理器包含了幫助你編輯特定類型文本的模式(例如,如果你經(jīng)常編輯 JSON 文件,你可以嘗試使用 ejson 模式)、嵌入的應(yīng)用程序、主題、拼寫檢查選項(xiàng)、linter 等。這就是 Emacs 有可能成為你日常計(jì)算的關(guān)鍵所在;一旦你找到一個(gè)優(yōu)秀的 Emacs 包,你可能離不開它了。
Emacs emoji
你可以按 M-x
(就是 Alt+X
)鍵,然后輸入 package-list-packages
命令,再按回車鍵來瀏覽包。軟件包管理器在每次啟動時(shí)都會更新緩存,所以第一次使用時(shí)要耐心等待它下載可用軟件包的列表。一旦加載完畢,你可以用鍵盤或鼠標(biāo)進(jìn)行導(dǎo)航(記住,Emacs 是一個(gè) GUI 應(yīng)用程序)。每一個(gè)軟件包的名稱都是一個(gè)按鈕,所以你可以將光標(biāo)移到它上面,然后按回車鍵,或者直接用鼠標(biāo)點(diǎn)擊它。你可以在 Emacs 框架中出現(xiàn)的新窗口中閱讀有關(guān)軟件包的信息,然后用安裝按鈕來安裝它。
有些軟件包需要特殊的配置,有時(shí)會在它的描述中列出,但有時(shí)需要你訪問軟件包的主頁來閱讀更多的信息。例如,自動完成包 ac-emoji
很容易安裝,但需要你定義一個(gè)符號字體。無論哪種方式都可以使用,但你只有在安裝了字體的情況下才能看到相應(yīng)的表情符號,除非你訪問它的主頁,否則你可能不會知道。
俄羅斯方塊
Emacs 有游戲,信不信由你。有數(shù)獨(dú)、拼圖、掃雷、一個(gè)好玩的心理治療師,甚至還有俄羅斯方塊。這些并不是特別有用,但在任何層面上與 Emacs 進(jìn)行交互都是很好的練習(xí),游戲是讓你在 Emacs 中花費(fèi)時(shí)間的好方法。
Emacs tetris
俄羅斯方塊也是我最初接觸 Emacs 的方式,所以在該游戲的所有版本中,Emacs 版本才是我真正的最愛。
使用 Emacs
GNU Emacs 之所以受歡迎,是因?yàn)樗撵`活性和高度可擴(kuò)展性。人們習(xí)慣了 Emacs 的鍵盤快捷鍵,以至于他們習(xí)慣性地嘗試在其他所有的應(yīng)用程序中使用這些快捷鍵,他們將應(yīng)用程序構(gòu)建到 Emacs 中,所以他們永遠(yuǎn)不需要離開。如果你想讓 Emacs 在你的計(jì)算生活中扮演重要角色,最終的關(guān)鍵是擁抱未知,開始使用 Emacs??目慕O絆地,直到你發(fā)現(xiàn)如何讓它為你工作,然后安下心來,享受 40 年的舒適生活。