(轉)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