Emacs基礎使用教程及常見命令整理

自閉火柴的玩具熊發表於2022-04-20

前言:最近使用Emacs,因此整理了官方中文教程中的一些知識點和常用的命令,方便查閱使用。


對於用習慣Windows的人來說,想要入門Emacs不是一件特別容易的事,但好在Emacs提供了官方的教程文件,比較清晰和詳盡的講述了Emacs的基本使用方法。

首先是Emacs的基本佈局,如圖:

Snipaste_2022-04-19_17-18-39

C-h-h檢視幫助窗格

Emacs提供了大量幫助資訊,可以在幫助窗格中檢視。

image-20220317162520000

C-h t 官方教程

C-h t可以開啟官方的使用教程,本文件基於此進行整理。

首先需要理解Emacs命令(快捷鍵)的構成:

image-20220317164105392

值得注意的是,Emacs的命令提示中短橫線-表示組合鍵同時按下

例如C-h-h,就是在按下CONTROL鍵之後,按兩次h;而C-h h,則是在按下CONTROL鍵之後按一次h,鬆開CONTROL鍵再按一次h。

根據官方教程介紹:META 系列組合鍵用來操作“由語言定義的單位(比如詞、句子、段落)”,而 CONTROL
系列組合鍵用來操作“與語言無關的基本單位(比如字元、行等等),後面的快捷鍵可以體會到這一點。

Emacs各種基礎常用命令介紹:

命令 作用
常用控制命令 C-x C-c 退出Emacs
C-z 掛起Emacs,回到shell但不殺死Emacs程式。在常用的 shell 中,通常可以用“fg”或者“%emacs”命令再次回到 Emacs 中
C-g 退出正在執行的命令(包括C-u命令)
C-/ 或 C-_ 或 C-x u 撤銷 Undo,可用C-u命令指定次數
幫助命令 C-h-h 或 C-h ? 開啟幫助,可以檢視與幫助相關的命令有哪些
C-h b 列出當前模式下的所有組合鍵命令及其效果
C-h c 其後接某個命令,用於在小緩衝區檢視其作用,例如 C-h c C-p
C-h k 其後接某個命令,用於開啟一個新窗格顯示更多幫助資訊
C-h f 其後接函式名,解釋一個函式,例如C-h f previous-line
C-h a 相關命令搜尋,用於列出與關鍵字相關的所有長命令名稱(可用M-x執行的命令),例如C-h a file
C-h i 開啟名為“*info*”的特殊緩衝區,可以閱讀安裝的軟體包使用手冊
ESC ESC ESC 通用的“離開”命令,可以用於關掉多餘窗格、離開小緩衝區,或者退出“遞迴編輯”模式(狀態列的編輯模式小括號外出現大括號表示進入遞迴編輯,例如【比如在用 M-% 進行互動式替換的時候你又用了 C-s 進行搜尋,這時替換模式並沒有結束,但你又進入了搜尋模式,這就是所謂的遞迴編輯。不能用 C-g 退出遞迴編輯,因為 C-g 的作用是取消“本層遞迴編輯之內”的命令和其引數(arguments)】
移動游標命令 C-v 移動到下一屏,相當於PageDn
M-v 移動到上一屏,相當於PageUp
C-l 重繪螢幕,將游標所在行置於螢幕中央
C-p 上一行,p代表previous
C-n 下一行,n代表next
C-b 向左移,b代表backward
C-f 向右移,f代表forward
M-b 向左移動一個“語言單位”(英文移動一個單詞,中文移動到標點符號)
M-f 向右移動一個“語言單位”(同上)
C-a 移動到一行的頭部
C-e 移動到一行的尾部
M-a 移動到句子的頭部
M-e 移動到句子的尾部
M-< 移動到所有文字(文件)的最開始
M-> 移動到所有文字(文件)的最末尾
數字引數命令 C-u (或按住META不放) 指定數字作為其後命令的引數,如C-u 8 C-f 會向前移動8個字元,C-u 8 * 會輸入8個*
窗格命令 C-x 1 關閉其他窗格,保留游標所在窗格,注意是數字1不是小寫字母l
C-x 2 分隔出兩個垂直窗格,水平分隔線
C-x 3 分隔出兩個水平窗格,垂直分隔線,可以和C-x 2混合使用,例如:image-20220419103932129
C-x 0 關閉當前游標所在窗格,注意是數字0
C-x o 將游標移動到下一個窗格,注意是小寫字幕o
視窗命令 M-x make-frame 視窗由多個窗格及其選單、滾動條、回顯區等組成。只有在圖形介面下能夠顯示多個視窗,文字終端中只能顯示一個視窗。該命令用於建立一個新的視窗(相當於Emacs多開)。
M-x delete-frame 刪除選中的視窗
插入刪除命令 對應Backspace鍵,刪除(Delete)游標前的一個字元
C-d 相當於Delete鍵,刪除(Delete)游標後的一個字元
M- 移除(Kill)游標前的一個詞,可貼上
M-d 移除(Kill)游標後的一個詞,可貼上
C-k 移除(Kill)游標到行尾的字元,可貼上。其後所有的行都向上移動。單獨的 C-k 會把一行的內容移除,而第二個 C-k 則會移除換行符,但如果同時使用C-u命令,則會將多行連同其後的換行符一起移除,而不僅僅是重複 C-k 而已。比如 C-u 2 C-k 會把兩行以及它們的換行符移除
M-k 移除(Kill)游標到句尾的字元,可貼上
C- 或 C-@ 為空格鍵,選擇需要被移除的文字高亮,如圖: image-20220416104621000
C-w 剪下 Cut(Kill),w代表wipe
M-w 複製 Copy
C-y 貼上 Paste,y代表召回(yank),用於召回前一次移除(Kill)的內容,通過同一個命令移除的內容可以被一次性召回(yank)
M-y 召回上一次之前移除(Kill)的內容,需要先使用C-y命令,再使用該命令。不斷重複該命令直到找到想要召回的內容,用C-u可為其指定正或負數引數,表示執行次數和方向
檔案命令 C-x C-f 尋找一個檔案,輸入的檔名出現在底部小緩衝區中(minibuffer)。該命令用於尋找不存在檔案時,會建立一個新檔案(並在儲存檔案時最終寫入硬碟)
C-x C-s 儲存檔案,如圖: image-20220419101727249
C-x C-w 寫入檔案,類似於Save as,另存為
緩衝區命令 C-x C-b Emacs將每個編輯中的檔案儲存在緩衝區(buffer)中,每開啟到一個檔案,就開闢一個緩衝區。該命令用於列出所有緩衝區(注意緩衝區名稱與檔名並不總是相同)。例如:image-20220419102253389
C-x b 該命令加緩衝區名稱,切換緩衝區
C-x s 儲存多個緩衝區
命令集擴充套件 擴充套件命令風格 由於Emacs命令眾多,不能都對應到CONTROL和META組合鍵上,所以採用擴充套件命令的方式來解決,包含兩種風格。C-x 字元擴充套件:在其後輸入另一個字元或組合鍵;M-x 命令名擴充套件:在其後輸入一個命令名。
C-x 擴充套件 C-x擴充套件很常見,不贅述
M-x擴充套件 M-x擴充套件不常用,例如使用M-x replace-string進行字串替換,會將游標之後的所有符合條件的文字進行替換:2image-20220419115347006。多字元命令可以使用鍵進行自動補全,如果有多個可補全的命令,Emacs會在窗格下方的“回顯區”(ECHO AREA)進行提示,類似在Shell中按兩次Tab的提示
自動儲存的恢復 M-x recover file Emacs會定期將編輯的檔案寫入”自動儲存“檔案,檔名首尾帶有”#“字元,該檔案會在正常存檔後被刪除。可以使用該命令恢復自動儲存的檔案。
切換主模式 M-x NAME-mode 命令中的NAME表示主模式的名稱,例如fundamental-mode切換到預設模式,python-mode切換到python模式等
切換Emacs外觀主題 M-x customize-themes 用於更換Emacs的外觀主題
擴充套件包查詢 M-x list-packages 列出可用的Emacs擴充套件包
搜尋命令 C-s 向前搜尋,輸入該命令進入“I-search”狀態。Emacs搜尋命令屬於漸進式(incremental)的搜尋,搜尋與輸入同時進行
C-r 向後搜尋,輸入該命令進入“I-search backward”狀態
替換命令 M-x replace-string 在前述M-x擴充套件部分提到過,用於替換游標之後符合條件的所有文字
M-% 互動式替換,根據使用者的輸入查詢文字,詢問並替換

Emacs狀態列介紹:

Emacs回顯區上方的一行是狀態列包含當前緩衝區的一些資訊,如下圖:

Snipaste_2022-04-19_15-30-09

(1)編碼型別:狀態列第一項為當前緩衝區所編輯文字的編碼型別,例如這裡的U表示utf-8,c表示中文gbk等。

(2)文字換行方式:編碼型別後面是換行符表示方式,主要是三種型別,Unix、Mac和\,分別代表:

  • Unix系統(如linux和近幾年的MacOS等)風格,每行以LF結尾,即"\n"
  • Mac系統風格,每行以CR結尾,即“\r”
  • Dos(包括Dox系統和Windows系統)風格,每行以CRLF結尾,即“\r\n”

(3)文字寫入許可權:第一個*的位置,表示文字是否可以寫入,“*”表示可寫入,“-”表示只讀

(4)文字是否被修改:第二個*的位置,表示緩衝區文字是否被修改,“*"表示已被修改,”-“表示未被修改

(5)當前資料夾:圖中-所在位置,表示本地的當前資料夾(工作區)

(6)當前檔名:TUTORIAL.cn位置是當前緩衝區的檔名

(7)游標位置百分比:55%位置表示當前游標位置佔全文的百分比,如游標在開頭則顯示--Top--,在結尾則顯示--Bot--。若檔案很小,一屏就能顯示全部內容,則顯示--ALL--

(8)游標所在行:L之後給出游標所在行數

(9)主模式:最後的括號表示當前使用的編輯模式,類似於在VScode中選擇使用什麼語言。Fundamental表示預設模式,可用M-x fundamental-mode切換。C-h m命令可以檢視主模式。主模式只能有一個。

(10)輔模式:與主模式對應,輔模式提供一些輔助功能,可以獨立開啟和關閉,如自動折行(Auto Fill)輔模式,使用M-x auto-fill-mode命令開啟,啟用之後Emacs會在打字超出一行邊界(通常為70個英文字元,可用C-x f命令重新設定,例如C-u 20 C-x f)時自動換行,同時,如果在段落中間進行修改,可用M-q手動折行。開啟輔模式之後,會在狀態列主模式後方顯示。


寫在最後:因為Emacs可擴充套件性非常強,有很多擴充套件包可以使用,同時也帶來了一些組合命令的擴充套件,例如Standard ML語言編輯模式(sml-mode)下,C-c C-x 命令後輸入sml可用於開啟sml語言的命令列模式(互動模式)。所以Emacs只是一個工具,具體到各種語言的使用時,還有非常多需要學習的地方。

相關文章