Emacs使用

sgqmax發表於2024-11-02

(轉)Editor MACroS(宏編輯器)

最初,人們認為Emacs是一個編輯器,與Vim一起並稱為兩大編輯神器,據說Vim是編輯器之神而Emacs是神之編輯器,又據說這世界上的程式設計師分三種,一種是使用Emacs,一種是使用Vim,另外一種是其他。
也有人認為Emacs是一個架構在編輯器上的整合環境,除了編輯功能外,還可以完成檔案管理,終端模擬,瀏覽網頁,收發郵件,編譯程式,以及煮咖啡等工作。
更有人說Emacs是偽裝成編輯器的作業系統
甚至說Eamcs是一種信仰。
Emacs能做什麼?
王垠師兄如是說: 據我所知,Emacs 的能力包括:編輯文字,編輯程式,作為其他程式的介面,作為作業系統,煮咖啡。
附:編輯器大戰

Emacs最初由Richard Stallman於1975年開發,之後產生了眾多的衍生版本,而目前使用得最多的兩個版本是Richard Stallman在1984年開發的GNU Emacs和1991年由Jamie Zawinski寫成的XEmacs。Emacs可謂歷史悠久,可以說Emacs的歷史,等於一部計算機史,等於一部世界駭客史

Emacs是一個具有超強擴充套件性,超強定製性的操作平臺,它能做什麼取決於你對它的定製和擴充套件。Emacs的強大來源於其近乎無限的可定製性和可擴充套件性。

Emacs 介紹

Emacs介面(從上到下):
選單欄
工具欄
編輯區域,即緩衝區buffer
狀態列mode line:[U][**|--|%%][name][All|Bot][L23][fundamental]
互動區域,即回顯區mini buffer:提示正在進行的操作,如“檔案已儲存”,等待輸入命令等。

命令: 透過M-x command方式執行命令,執行命令時,可用TAB補全,使用M-p上翻,使用M-n下翻。Eamcs的取消按鈕是連按三下ESC ( M-x keyboard-escape-quit ),但當使用一些互動式命令時可能無法使用此種方法,此時可用C-g ( M-x keyboard-quit )。

快捷鍵: 用快捷鍵(組合鍵)傳送命令,C- , M- , C-M- , S- , RET , TAB , ESC , SPC , DEL , Delete,如C-x C-c ( M-x save-buffers-kill-emacs),還有些命令可傳遞引數,如C-u(引數)C-f 參數列示重複執行C-f 的次數

模式: 主要模式major mode和次要模式minor mode

主要模式由檔案型別決定,常見的有:

  • fundamental:預設的Emacs模式,有最少的設定和繫結
  • text-mode:編輯文字的基本模式
  • c-mode:用於C程式原始碼
  • lisp-interaction-mode:用於編輯和編譯Lisp
  • ptex-mode:用於編輯TeX文件
    次要模式可以組合到主要模式中,常見的如:
  • abbrev-mode:用於生成和使用縮寫
  • auto-fill-mode:用於自動文字環繞,填充較長的行和段落
  • line-number-mode:顯示當前行號
  • overwrite-mode:覆蓋模式,代替預設的插入模式

可以用命令來指定模式:M-x modeName,對於一個buffer來說,當前的主要模式只能有一種,當指定主要模式時,原來的主要模式會被替換,而當前的次要模式可以有多種。如果輸入的模式包含在當前模式中,對於主要模式,會清空所有的次要模式,對於次要模式,會關閉這個次要模式。模式的變化在狀態列中可以看到。

幫助文件:

快捷鍵 命令 說明
C-h ? 幫助系統,可以透過SPC和DEL鍵滾動,透過ESC退出
C-h t M-x help-with-tutorial 進入《Emacs 快速指南》
C-h f M-x describe-function 檢視函式說明
C-h k KEYS M-x describe-key KEYS 檢視快捷鍵對應的命令及其簡要說明
C-h r M-x info-emacs-manual Emacs使用手冊
C-h i M-x info 《Emacs說明》
C-h a M-x apropos-command 搜尋命令》
C-h v M-x describe-variable 檢視變數說明》
C-h m M-x describe-mode 檢視當前mode的相關文件,包含mode中的命令、快捷鍵等》
C-h c KEYS M-x describe-key-briefly 檢視鍵繫結說明》
C-h w M-x where-is 檢視某個命令對應的快捷鍵》
C-h b M-x describe-bindings 檢視當前buffer所有的快捷鍵列表》
KEYS C-h 檢視當前buffer中以某個快捷鍵序列開頭的快捷鍵列表
使用幫助時,可能會分割出其他frame,可透過C-x 1 關閉。

一. 編輯功能

1. 檔案操作

檔案操作都集中在C-x “選單”中:

快捷鍵C-x 命令M-x 說明
C-x C-f fine-file 開啟檔案或者目錄
C-x C-c save-buffers-kill-emacs 儲存並退出
C-x C-z iconify-or-deiconify-frame 掛起(最小化)
C-x C-r fine-file-read-only 只讀模式開啟
C-x i insert-file 插入檔案
C-x C-s save-buffer 儲存
C-x s save-some-buffers 儲存所有buffers
C-x C-w write-file 另存為
C-x RET r revert-buffer-with-coding-system 以指定編碼讀取檔案
C-x RET f set-buffer-file-coding-system 以指定編碼儲存檔案
revert-buffer 恢復至初始狀態
C-x d dired 進入目錄列表模式
C-x C-d list-directory 獲取檔案列表(簡潔)

2. 游標定位

向前 向後 向下 向上
翻頁 C-v M-v
字元 C-f C-b C-n C-p
單詞 M-f M-b
M-a M-e
C-a C-e
段落 M-{ M-}
緩衝區 M-< M->

其他:

M-g M-g goto-line 跳轉到某行
M-x goto-char 跳轉到字元位置
C-M-l reposition-window 將當前行卷至頁面中部(使用數字引數指定行)
M-r M-x move-to-window-line 移動游標至頁面中間的行(使用數字引數指定行)

3.輸入刪除

輸入很簡單,直接在緩衝區輸入即可,不像Vim

- 向前 向後
字元 C-d DEL
單詞 M-d M-DEL
C-k(刪除至行尾)
整行 C-S-backspace
按表示式刪除 C-M-k
區塊 C-w
刪除連續空格 M-x delete-horizontal-space
注1. 在PC中,用Backspace代替DEL
注2. 單詞、行、區塊的刪除是kill,相當於剪下,會被放入kill-ring,字元及空格的刪除是delete

4.複製貼上

複製前要選擇:C-@開始區塊選擇,然後移動游標,選中區域會高亮
剪下:前面“剪下”部分包括了一些剪下操作,對區塊剪下可用C-w
複製:區塊複製用M-w
貼上:C-y貼上kill-ring堆疊的最後一次內容,C-y之後可以繼續M-y,對kill-ring內容依次召回。

5.撤銷重做

撤銷:C-/ (每插入20個字元,視為一個undo的單位)
重做:C-/ 後,依次輸入C-g C-/ 就可以redo

二.高階編輯

1.視窗管理

- - -
C-x 2 split-window-vertically 水平分割
C-x 3 split-window-horizontally 豎直分割
C-x 1 delete-other-window 只保留當前窗格
C-x 0 delete-window 關閉當前視窗
C-x o other-window 切換視窗
C-M-v scroll-other-window 滾動下一個窗格

2.緩衝區管理

Emacs開啟新的buffer時,並不會關閉原來的buffer,需要手動操作

- - -
C-x C-b list-buffers 檢視緩衝區列表
C-x b switch-to-buffer 切換緩衝區
C-x k kill-buffer 關閉緩衝區
其他可參考ibuffer.el擴充套件。

3.搜尋和替換

Emacs搜尋包括增加搜尋和一般搜尋,前者指在前一次搜尋的結果上繼續搜尋,在使用增加搜尋時,若上一次搜尋之後進行了其他操作,則需要連續按兩次快捷鍵召回關鍵詞。

(1). 增加搜尋

- - -
C-s M-x isearch-forward 向前增加搜尋
C-r M-x isearch-backward 向後增加搜尋
C-M-s M-x isearch-forward-regexp 正規表示式向前增加搜尋
C-M-r M-x isearch-backward-regexp 正規表示式向後增加搜尋

(2). 一般搜尋

- - -
M-x search-forward 向前搜尋
M-x search-backward 向後搜尋
M-x search-forward-regexp 正規表示式向前搜尋
M-x search-backward-regexp 正規表示式向後搜尋

(3). 替換

- - -
M-x replace-string 替換
M-x replace-regexp 正規表示式替換

(4). 詢問替換

- - -
M-% M-x query-replace 詢問替換
C-M-% M-x query-replace-regexp 正規表示式詢問替換

(5). 取消搜尋

C-g 取消搜尋,游標返回搜尋前的位置,RET結束搜尋,游標停留在當前位置。

3. 批次處理

批次處理的命令有很多,如:
選中區域,M-x untabify 將TAB字元轉換為空格。
選中區域,M-x indent-region 對齊文字塊。

三.簡單配置

Emacser通常要對Emacs進行定製,使用起來才會爽。據說Vimer嘲笑Emacser的一個理由就是:

Emacser如果丟了配置檔案就什麼都幹不了。

1.配置檔案

# Emacs配置檔案位置
~/.emacs
~/.emacs.d/init.el
~/.config/emacs/init.el

改一下顏色配置:

(set-background-color "black") ;; 使用黑色背景
(set-foreground-color "white") ;; 使用白色前景
(set-face-foreground 'region "green")  ;; 區域前景顏色設為綠色
(set-face-background 'region "blue") ;; 區域背景色設為藍色

重啟可使配置檔案生效,但Emacser一般用 M-x eval-buffer 使其立即生效。

2.安裝外掛

Emacs和Vim都有大量的外掛,Emacs的外掛檔案一般都是以el為字尾,首先指定一個外掛目錄,如~/.emacs.d/lisps,然後在~/.emacs中指定外掛目錄和要使用的外掛:

(add-to-list 'load-path "~/.emacs.d/lisp/"')
(require 'pluginname')

還是對於顏色設定,前面的方法只是進行了一些簡單的顏色設定,有熱心人寫了外掛,配置好了很多方案,不僅僅是前景背景色,還包括語法高亮等,可從這裡下載,解壓後將color-theme.el檔案和themes資料夾複製到外掛目錄,然後修改配置檔案:

(add-to-list 'load-path "~/.emacs.d/lisp/"')
(require 'color-theme)
(color-theme-initialize)

M-x eval-buffer使配置檔案生效後,可執行外掛提供的命令:M-x color-theme-select RET進入配色方案選擇介面,此時可能希望將配色方案設成預設,按d,會出現該配置的提示資訊,如:

color-theme-classic is an interactive Lisp function in
`color-theme-library.el'.
(color-theme-classic)
Color theme by Frederic Giroud, created 2001-01-18.
AntiqueWhite on darkslategrey scheme.  Based on Gnome 2, with my favorit
color foreground-color and fontlock color.

將類似 (color-theme-classic) 的內容新增到.emacs中,就可每次啟動Emacs時自動選擇配色方案了。

3.大佬進化

這裡推薦幾個有名的發行版:

  • Spacemacs
  • Centaur-Emacs
  • Doom-Emacs
  • M-Emacs

轉自:https://blog.csdn.net/fwenzhou/article/details/8827867

相關文章