關於 Emacs 的使用方法初入門


關於 Emacs 的學習,其實老早之前就想進行了,現在正好借學習 Common Lisp 這個機會來整理一下。

測試環境:
Windows 10 20H2;
Emacs 27.2 x86_64-w64-mingw32;使用圖形界面。

如無注明,本文的參考即為 Emacs 中內置的 Emacs 快速指南(Tutorial),相關術語的中文譯文選擇,也是向 TUTORIAL.cn(孫一江翻譯、薛富僑維護、水本社區校對)靠齊的。在此向他們及其他參考資料的作者一並表示感謝。

操作說明

不同於 Vim,Emacs 在打開一個文件后就處於可編輯狀態;和 Vim 相同的是,Emacs 也建議不要離開主鍵盤區來完成各類操作。Emacs 采用一種獨特的方式來記錄按鍵,為了方便閱讀,筆記仍會盡可能使用一貫的按鍵記錄方式,同時標注 Emacs 的標記,作為對比學習的參考。

在此之前,先梳理一下這種標記的基本含義。

  1. C 代表 Ctrl
  2. M 代表 Alt
  3. <ESC> 代表 Esc
  4. <Return> 代表 Enter
  5. <SPC> 代表 Space
  6. <TAB> 代表 Tab
  7. <DEL> 代表 Backspace

操作邏輯

Emacs 作為早期在文字終端中使用軟件,其中各項操作需要依靠鍵盤完成,而除了文字輸入外,大部分又以組合鍵的形式存在,即 Ctrl + 某某鍵,Alt + 某某鍵等;如 Ctrl + VC-v)向下翻頁,Alt + VM-v) 向上翻頁。

但這樣所能表示的功能是有限的,所以這里先介紹拓展(eXtend)命令的邏輯:

  • 字符拓展:指按下 Ctrl + X 后再按下某個鍵,或某個組合鍵,如 Ctrl + X Ctrl + FC-x C-f)打開一個文件;
  • 命令名拓展:指按下 Alt + X 后再輸入一個命令名,最后回車,如 Alt + X help-with-tutorial EnterM-x help-with-tutorial)打開 Emacs 快速指南

使用 Ctrl + H TC-h t)可以快捷打開 Emacs 快速指南。

在使用字符拓展時,如果你操作地很慢,則能觀察到 Emacs 窗口底部會顯示出你已按下的組合鍵。比如你想打開一個文件,在按完 C-x 后忘記了接下來操作,一小段時間后,Emacs 底部顯示出了你剛才的按鍵:

回顯區.png

圖 1 回顯區

這個提示了之前按鍵的區域稱之為回顯區(Echo Area)。其上具有較深底色的區域稱之為狀態欄(Mode Line)。

特別地,在使用 M-x 或 C-x C-f 后,你需要輸入相應的內容:

小緩存.png

圖 2 小緩存

此時,接受你輸入的這塊區域被稱之為小緩存(Minibuffer),在這里也可以像在普通緩存區一樣執行各種 Emacs 操作。

在小緩存中,命令名或其他內容的輸入未必要完整,可以在輸入開頭幾個字符后,按下 Tab 鍵來補全。如果是類似 help-with-tutorial 這樣有連字符的內容,可以輸入 hel 后按 2 下 Space 鍵實現補全到 help-(單按 Tab 鍵不會補出 - 符號),然后再輸入 w 后按 Tab 鍵補全完整(而單按 Space 鍵不會補到 - 之后,所以兩者要結合起來用)。

無論是小緩存還是回顯區,也無論一個操作執行到何種地步,都可以使用 Ctrl + GC-g)來中斷取消(推測 G 為 Give up 之意)或者連按 3 下 Esc 鍵(<ESC><ESC><ESC>)。

查看操作

Emacs 作為文本編輯器,首要的任務當然是文本的查看,相關操作如下:

操作 操作鍵 特有記法 備注 主區外鍵
移動光標(→) Ctrl + F C-f F 意為 Forward
移動光標(←) Ctrl + B C-b B 意為 Backward
移動光標(↓) Ctrl + N C-n N 意為 Next
移動光標(↑) Ctrl + P C-p P 意為 Previous
向下翻頁 Ctrl + V C-v 當前頁面的最后兩行會保留到下一頁面中 PgDn
向上翻頁 Alt + V M-v 或 <ESC>v 先按一下 Esc,再按一下 V
這種為沒有 Alt 設計的替代按法,
后面不會再記錄了
PgUp
將當前光標所在行置於中心 / 頂 / 底 Ctrl + L C-l 按第一次置於中心,第二次頂,第三次底 /
移動到行首 Ctrl + A C-a A 是第一個英文字母,可能有開頭之意 Home
移動到行尾 Ctrl + E C-e E 意為 Ending End
移動到下一個單詞 Alt + F M-f 如果全是中文的話,會移動到下一個標點符號處 /
移動到上一個單詞 Alt + B M-b 如果全是中文的話,會移動到上一個標點符號處 /
移動到句首 Alt + A M-a 中英文邏輯一致 /
移動到句尾 Alt + E M-e 中英文邏輯一致 /
移動到文件首 Alt + Shift + , M-< 因為輸入 < 需要按 Shift + , /
移動到文件尾 Alt + Shift + . M-> 因為輸入 > 需要按 Shift + . /
向后搜索 Ctrl + S C-s 輸入要搜索的字符串后,繼續執行 C-s 跳轉到下一個匹配的項,
使用 <DEL> 回到上一個匹配的項,使用 <Return> 結束搜索
/
向前搜索 Ctrl + R C-r 輸入要搜索的字符串后,繼續執行 C-s 跳轉到上一個匹配的項,
使用 <DEL> 回到下一個匹配的項,使用 <Return> 結束搜索
/

表 1 基本查看操作表

在 “向后搜索” 中,也可以使用 C-r 改變搜索方向,反之亦然。

編輯操作

Emacs 在打開文件后,會直接進入編輯模式,此時可以和很多常見的編輯器一樣,輸入、刪除、換行等,相關操作如下:

操作 操作鍵 特有記法 備注 主區外鍵
開始選擇 Ctrl + Space 或
Ctrl + Shift + 2
C-<SPC> 或
C-@
激活此命令后,進入 Mark set 狀態,
此時移動光標,舊光標與新光標之間的
內容將被選中
/
刪除前一個字符或
刪除選中的內容
Backspace <DEL> 注意不要當成是 Delete 鍵了 /
刪除后一個字符 Ctrl + D C-d / Delete
復制選中的內容[1] Alt + W M-w 復制選中的內容 /
移除(Kill)選中的內容 Ctrl + W C-w 復制選中的內容,然后將其刪除,相當於剪切 /
移除(Kill)前一個單詞 Alt + Backspace M-<DEL> 如果全是中文的話,會復制到上一個標點符號處,
然后將其間的內容刪除
/
移除(Kill)后一個單詞 Alt + D M-d 如果全是中文的話,會復制到下一個標點符號處,
然后將其間的內容刪除
/
移除(Kill)至行尾 Ctlr + k C-k 從光標處復制到行尾,不含此行的換行符,
然后將其間的內容刪除
連續的多次移除所刪的內容會被復制在一起
/
移除(Kill)至句尾 Alt + k M-k 從光標處復制到句尾,含此句的句號,
然后將其間的內容刪除
/
召回(Yank) Ctrl + Y C-y 將最后一次復制的內容在光標處插入,相當於粘貼 /
召回循環 Alt + Y M-y 使召回后,立刻使用此命令,可改變召回的內容
為上上一次的復制,連續使用則不斷回溯
回到最初后再次使用則回到最后
/
撤銷操作 Ctrl + / 或
Ctrl + Shift + - 或
Ctrl + X U
C-/ 或
C-_ 或
C-x u
光標移動、頁面滾動等命令不會撤銷
輸入的字符最多 20 個為一組視為一次操作
撤銷操作本身也會視為一次操作被記錄下來
/

表 2 基本編輯操作表

因此,在撤銷后如果想要立刻重做,可以通過 C-g C-/ 來實現[2]

文件與窗格(Window)操作

如何打開、關閉等,也是十分重要的內容,整理如下:

操作 操作鍵 特有記法 備注 主區外鍵
打開文件 Ctrl + X Ctrl + F C-x C-f 需要輸入文件的路徑地址,
不存在則進入新建模式
/
保存文件 Ctrl + X Ctrl + S C-x C-s / /

表 3 基本文件操作表(上)

需要注意的是,一個打開的文件在 Emacs 中會以一個緩沖區(Buffer)的形式存在,Emacs 中可以同時存在多個緩沖區,一個在顯示在界面中,多個隱藏了起來(也可以讓兩個或更多個顯示在界面中)。

操作 操作鍵 特有記法 備注 主區外鍵
保存所有文件 Ctrl + X S C-x s 會保存前台以及后台的未保存的文件 /
列出緩存區列表 Ctrl + X Ctrl + B C-x C-b 在緩存區列表中回車,會調出光標所在行的緩存區,
這會讓兩個緩存區位於前台
/
切換緩存區 Ctrl + X B C-x b 需要輸入緩存區的名字來切換,會將當前光標活動的緩存區
切換成目標緩存區
/
關閉當前緩存區[3] Ctrl + X K C-x k 可以實現放棄更改 /
關閉所有緩存區,退出 Ctrl + X Ctrl + C C-x C-c 會詢問是否保存未保存的緩存區 /

表 4 基本文件操作表(下)

在使用圖形界面時,一個有最大化、最小化和關閉按鈕的 Emacs 界面被稱之為一個窗口(Frame);在一個窗口之中,Emacs 可以分出 2 個或更多的 “部分” 來顯示同一個緩存區的不同位置或顯示不同的緩存區,這些 “部分” 被稱之為窗格(Window)。

一個 Emacs 窗口與其中的三個窗格.png

圖 3 一個 Emacs 窗口與其中的三個窗格

操作 操作鍵 特有記法 備注 主區外鍵
在新窗格中打開文件 Ctrl + X 4 Ctrl + F C-x 4 C-f 打開后,光標也會自動切換到新窗格中 /
將當前窗格左右一分為二[4] Ctrl + X 3 C-x 3 分割后,皆顯示原當前窗格的緩存區
光標停留在左窗格中
/
將當前窗格上下一分為二 Ctrl + X 2 C-x 2 分割后,皆顯示原當前窗格的緩存區
光標停留在上窗格中
/
僅顯示當前窗格 Ctrl + X 1 C-x 1 其他窗格將被關閉,當前窗格將最大化顯示
關閉窗格並不會連帶關閉其中的緩存區
/
將光標移動到另一個窗格 Ctrl + X O C-x o 連續使用,可以循環回原窗格
光標所在的窗格即為當前窗格
/

表 5 基本窗格操作表

配置說明

新版的 Emacs (本筆記為 Emacs 27.2)在配置方面似乎與之前略有出入,總之,和我在其他地方查到的說法不太一致。

配置文件

Emacs 的配置位於 %AppData%\.emacs[5] 這個文件之中,新安裝 Emacs 情況下,建議在配置文件的最后添加如下內容[6]

Lisp
(add-to-list 'package-archives 
             '("melpa" . "http://melpa.org/packages/"))
;; 啟用 melpa 的包管理。

插件相關

完成上一節的添加后,重新打開 Emacs,就可以在線安裝插件了,下面介紹一些相關操作。

查詢與安裝

執行 M-x package-list-packages 打開插件列表[6:1]

插件列表加載中.png

圖 4 插件列表加載中

插件列表的加載可能會比較慢,當狀態欄中有 Loading 字樣時,表示列表還在加載之中。

插件列表加載完畢.png

圖 5 插件列表加載完畢

當回顯區出現 Package refresh done 字樣時,表示加載已經完成了,此時可以使用 C-s 來搜索需要的插件了。

單擊目標插件名,並在新出現的窗格中單擊 “Install”,並在彈出的對話框中選擇 “是(Y)”。

插件安裝完成.png

圖 6 插件安裝完成

當觀察到 Other versions 字段后出現了 installed 字樣后,就表示安裝成功了。

如果列表加載太慢或安裝太慢,可以考慮更換為網易的鏡像源:將配置文件 .emacs 中的 http://melpa.org/packages/ 替換為 http://mirrors.163.com/elpa/[7]

快速安裝

如果知道准確的插件名,可以使用 M-x package-install,然后在小緩存中輸入准確的插件名后回車確認[8]

列出已安裝插件與卸載

使用 M-x package-delete 進入插件卸載模式[9],執行命令后,小緩存區等待輸入插件名,此時直接按下 Tab 鍵,可以查看已安裝插件列表:

已安裝插件列表.png

圖 7 已安裝插件列表

然后,輸入待刪除插件的名稱(注意可以使用 Tab 鍵補全)即可。

主題、字體、字號等配置

這部分內容基本為自行探索所得。

首先推薦 Doom 系列主題,要獲得這個主題,安裝插件 doom-themes

完成后,定位到菜單欄的 “Options” → “Customize Emacs” → “Custom Themes”,在新出現的窗格中,勾選 doom-opera-light(本筆記使用的主題)后,回到頂部,點擊 “Save Theme Settings” 即可。

如果想要尋找其他主題,建議在 “A GNU Emacs Themes Gallery” 上找到后[6:2],再去安裝相應的插件。

要更改字體與字號,定位到菜單欄 “Options” → “Set Default Font...”,在彈出的窗口中設置字體,本筆記使用的設置如下:

  • 字體(F):等距更紗黑體 Slab SC;
  • 字形(V):常規;
  • 大小(S):四號。

完成后點擊 “確定”,最后需要 “Options” → “Save Options” 才能保存這一設置(否則下次啟動 Emacs 又恢復成原來的樣子了)。

滾動條與圖標工具欄用處不大,反而還隱藏界面的簡潔性,去除方法為在 .emacs 配置文件的最后添加如下內容[10]

Lisp
(set-scroll-bar-mode nil)
;; 隱藏滾動條。

(tool-bar-mode 0)
;; 隱藏圖標工具欄。

雜談

這篇筆記基本上算是實踐完 Emacs 快速指南后心得體會。非常建議初次學習 Emacs 的讀者,先跟着快速指南操作一遍,再來閱讀此筆記。我在筆記中按功能,分類整理了 Emacs 的快捷鍵,同時也增加了我自己的表述,希望能從另一個角度幫助讀者理解和記憶。

此外,這篇 Emacs 學習指南也很值得一讀:mastering-emacs-in-one-year-guide/guide-zh.org at master · redguardtoo/mastering-emacs-in-one-year-guide · GitHub

在准備寫博客之前,我一直在考慮,應該使用什么樣的方式、面對什么樣的讀者。不過后來我發覺,又何必等到一切准備就緒呢?互聯網世界日新月異,既然已經加入,何不分享一些感受?反正筆記已經記下,不如將其公開;各人有各自的角度,這一點對作者和讀者都同樣適用。若真為自己的所思所悟,那就不必瞻前顧后,就讓它恣意地沉浮在互聯網的洪流之中吧,其價值自交給淘沙者們去評判吧。


  1. 這部分參考了菜單欄上面的快捷鍵提示。 ↩︎

  2. 參考:使用 Emacs “撤消” 后,如何 “重做” 更改? - ITranslater。 ↩︎

  3. 參考:在 Emacs 中關閉當前緩沖區的關鍵順序是什么? - 問答 - 雲+社區 - 騰訊雲。 ↩︎

  4. 這部分為自行類推出來的。 ↩︎

  5. 如果 Win10 系統用戶名為 ABC,那 %AppData% 就等同於 C:\Users\ABC\AppData\Roaming。可以按 Win + R 打開 “運行” 窗口,在其中輸入 %AppData%\.emacs 后回車,然后選擇記事本或其他文本 / 代碼編輯器打開它,建議使用 Visual Studio Code。 ↩︎

  6. 參考:Emacs 入門系列:定制 Emacs 的 Theme - 簡書。 ↩︎ ↩︎ ↩︎

  7. 參考:推薦使用 TUNA ELPA 鏡像(優先於 Emacs China ELPA 鏡像) - Emacs-general - Emacs China。 ↩︎

  8. 參考:emacs 操作 - 插件篇 - 簡書。 ↩︎

  9. 參考:emacs - How to remove installed elpa package - Stack Overflow。 ↩︎

  10. 滾動條部分參考 “Emacs-050-關閉 Emacs 滾動條_小灰筆記 - CSDN 博客”,圖標工具欄部分參考 “Emacs 顯示時間、隱藏菜單欄工具欄、關閉啟動畫面、高亮當前行_u010654583 的博客 - CSDN 博客”。 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM