Emacs
本頁面為 Emacs 的入門教程。
15 分鐘入門 Emacs。
簡介
Emacs 是一款非常容易上手的編輯器,只需要簡短的幾行配置就能使用,但是想要非常熟練地使用 Emacs 進行各項工作還是需要一定的時間。
作為入門教程,這裏僅介紹 Emacs 的基本功能,以及較方便地用 Emacs 編寫、調試代碼的方法。
入門
命令
命令在 Emacs 中有很大的作用。
使用 Application 鍵(Windows 系統下 Emacs 未指定這個鍵,需要手動設置)或者快捷鍵 M-x(Alt+x)可以打開命令輸入,輸入完按下回車可以執行命令。
通常使用 es 或者 eshell 命令來打開 Eshell(類似一個終端)。
輸入命令通常可以用快捷鍵代替。
緩衝 (buffer)
緩衝即打開的文件和進程,在不保存的情況下,在緩衝中修改並不會修改到文件。
在緩衝區的底部點擊緩衝的名字或者使用快捷鍵可以切換緩衝。
編譯、調試和運行
編譯和調試功能的入口在頂部菜單欄的 Tools 下拉欄。使用者也可以通過命令或者自定義快捷鍵使用編譯和調試功能。
可以使用終端或 Eshell 運行程序。
按下 Tools 中的調試 (gud-gdb) 後,輸入程序名(一般會自動輸好,但如果中途將程序另存為或者打開了兩個需要調試的程序,自動輸好的文件名可能會有誤)即可開始調試。
分屏
這個功能能讓使用者同時查看各個緩衝的內容,而不需要來回切換緩衝,方便測試、調試代碼。
分屏功能可以同時顯示多個窗口,用鼠標拖動窗口的邊緣可以縮放窗口。
幾個快捷鍵:
- 刪除分屏 "C-x 0":將這個分屏刪去
- 橫向分屏 "C-x 3":將這個分屏橫向分成兩半
- 縱向分屏 "C-x 2":將這個分屏縱向分成兩半
推薦的窗口布局為將窗口分為四塊:先橫向分,調整一塊的寬度約為 ¾ 屏,作為編輯窗口。將另一塊橫向分,一塊作為調試和編譯信息顯示的窗口,另一塊再縱向分,一塊打開輸入文件,一塊打開輸出文件。

快捷鍵
Emacs 擁有極為豐富的快捷鍵,可以大幅提高工作的效率。使用者可以在配置中自定義快捷鍵或者設置快捷鍵的映射。
由於快捷鍵過多,所以 Emacs 快捷鍵的使用與操作系統不同。
為了方便描述,做如下約定:
| 字符 |
鍵位 |
| C |
Ctrl |
| M |
Alt |
| ? |
任意鍵位 |
一般有以下三種:
F?、ESC:直接按下對應的功能鍵。
M-?、C-?、C-M-?:按下Alt或者Ctrl的同時按下 ?。
? ?:先按下第一個 ? 代表的鍵,鬆開再按下第二個 ? 代表的鍵。
下面是一些常用的快捷鍵:
C-x h:全選
C-x left、C-x right:切換到上/下一個緩衝
C-x d:打開一個目錄
C-x C-f:打開一個文件(如果不存在文件則新建文件)
個性化
剛安裝好的 Emacs 外觀難看且不好使用,因此需要對其進行個性化設置。
由於配置不好記,所以部分可以直接設置的部分建議不要記配置。
直接設置
- Options:
Highlight Matching Parentheses 高亮匹配括號
- Options:
Blink Cursor 設置光標閃爍
- Options Show/Hide:
Tool Bar 顯示/不顯示工具欄(默認顯示,建議不顯示)
- Options:
Use CUA Keys 勾選後可以使用 Ctrl + C,Ctrl + V 等快捷鍵進行復制粘貼
- Options Customize-Emacs:
Custom Theme 選擇配色方案,選擇完後需要點擊保存
- Options:
Save Options 保存配置
配置
在 home 目錄下顯示隱藏文件(Windows 系統在 用户目錄 的 AppData\Roaming 目錄下),".emacs" 就是配置文件(如果沒有説明之前沒保存),打開修改即可。如果 Emacs 已打開,則需要重啓 Emacs,配置才能生效。
考場推薦的配置如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | ;;設置一鍵編譯 可以自行添加參數 難背考場不建議使用 不建議依賴一鍵編譯
(defun compile-file ()(interactive)(compile (format "g++ -o %s %s -g -lm -Wall" (file-name-sans-extension (buffer-name))(buffer-name))))
(global-set-key [f9] 'compile-file)
;;;;設置編譯快捷鍵(如果設置了一鍵編譯不要與一鍵編譯衝突)
;;(global-set-key [f9] 'compile)
(global-set-key (kbd "C-a") 'mark-whole-buffer) ;;全選快捷鍵
(global-set-key (kbd "C-z") 'undo) ;;撤銷快捷鍵
(global-set-key [f10] 'gud-gdb) ;;GDB調試快捷鍵
(global-set-key (kbd "RET") 'newline-and-indent) ;;換行自動縮進
(global-set-key (kbd "C-s") 'save-buffer) ;;設置保存快捷鍵
(setq-default kill-ring-max 65535) ;;擴大可撤銷記錄
;;C++ 代碼風格 一般控制縮進規則
;;;"bsd" 所有大括號換行
;;;"java" 所有大括號不換行。else 接在右大括號後面
;;;"awk" 只有命名空間旁、定義類、定義函數時的大括號換行。else 接在右大括號後面
;;;"linux" 只有命名空間旁、定義類、定義函數時的大括號換行。else 接在右大括號後面。一般來説,這個風格應該有 8 格的空格縮進
(setq-default c-default-style "awk")
|
完整配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 | ;;設置一鍵編譯
(defun compile-file ()(interactive)(compile (format "g++ -o %s %s -g -lm -Wall" (file-name-sans-extension (buffer-name))(buffer-name))))
(global-set-key [f9] 'compile-file)
;;;;設置編譯快捷鍵(如果設置了一鍵編譯不要與一鍵編譯衝突)
;;(global-set-key [f9] 'compile)
;;考場必備
(global-set-key (kbd "C-a") 'mark-whole-buffer) ;;全選快捷鍵
(global-set-key (kbd "C-z") 'undo) ;;撤銷快捷鍵
(global-set-key [f10] 'gud-gdb) ;;GDB調試快捷鍵
(global-set-key (kbd "RET") 'newline-and-indent) ;;換行自動縮進
(global-set-key (kbd "C-s") 'save-buffer) ;;設置保存快捷鍵
(setq-default kill-ring-max 65535) ;;擴大可撤銷記錄
;;(define-key key-translation-map [apps] (kbd "M-x")) ;; windows 系統下設置命令快捷鍵
;;設置縮進
;;;C++ 代碼縮進長度。
(setq-default c-basic-offset 4)
;;;使用 tab 縮進
(setq-default indent-tabs-mode t)
;;;tab 的長度。務必和縮進長度一致
(setq-default default-tab-width 4)
(setq-default tab-width 4)
;;設置默認編碼環境
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8)
;;不顯示歡迎頁面
(setq-default inhibit-startup-screen t)
;;設置標題
(setq-default frame-title-format "")
;;顯示行號
(global-linum-mode t)
;;高亮
(global-hl-line-mode 1);;高亮當前行
(show-paren-mode t);;高亮匹配括號
(global-font-lock-mode t);;語法高亮
;;允許emacs和外部其他程序的粘貼 好像默認允許
(setq-default x-select-enable-clipboard t)
;;設置字體是 Ubuntu Mono 的 16 號,如果字體不存在會報錯
(set-default-font "Ubuntu Mono-16")
;(set-default-font "Consolas-16") ;; windows 系統請用這條
;;鼠標滾輪支持
(mouse-wheel-mode t)
;;設置光標形狀為豎線(默認為方塊)
(setq-default cursor-type 'bar)
;;回答 yes/no 改成回答 y/n
(fset 'yes-or-no-p 'y-or-n-p)
;;透明度
(set-frame-parameter (selected-frame) 'alpha (list 85 60))
(add-to-list 'default-frame-alist (cons 'alpha (list 85 60)))
;;減少頁面滾動的行數,防止整頁地滾動
(setq-default scroll-margin 3 scroll-conservatively 10000)
;;優化文件樹結構
(ido-mode t)
;;配色方案
(setq default-frame-alist
'((vertical-scroll-bars)
(top . 25)
(left . 45)
(width . 120)
(height . 40)
(background-color . "grey15")
(foreground-color . "grey")
(cursor-color . "gold1")
(mouse-color . "gold1")
(tool-bar-lines . 0)
(menu-bar-lines . 1)
(scroll-bar-lines . 0)
(right-fringe)
(left-fringe)))
(set-face-background 'highlight "gray5")
(set-face-foreground 'region "cyan")
(set-face-background 'region "blue")
(set-face-foreground 'secondary-selection "skyblue")
(set-face-background 'secondary-selection "darkblue")
(set-cursor-color "wheat")
(set-mouse-color "wheat")
(custom-set-variables
'(ansi-color-faces-vector
[default default default italic underline success warning error])
;;啓動 Ctrl-x Ctrl-c Ctrl-v = 剪切 複製 粘貼
'(cua-mode t nil (cua-base))
'(show-paren-mode t)
;;隱藏工具欄
'(tool-bar-mode nil))
;;關閉光標閃爍
'(blink-cursor-mode nil)
(custom-set-faces)
|
拓展閲讀
要以終端模式啓動 Emacs,在啓動時添加參數 -nw。Emacs 有多種變體,如採用 native-comp 來減少延遲的 GCC Emacs 及其純 GTK 版本變體、針對 macOS 優化的 Emacs Macport。
Emacs 有中心化的軟件倉庫,配置後可通過 M-x package-install 來安裝插件。使用 鏡像站 可以加快下載速度。
Emacs 可以使用語言服務器(Language Server Protocol)來提高編輯體驗,目前推薦的 C++ 後端是 Clangd。前端可以採用 Eglot 或 Emacs LSP,參閲 此條目 可能對選擇前端有所幫助。
拓展名為 .org 的 Org Mode 文檔可以通過 Pandoc 轉換為 Markdown 文檔。
參考資料與註釋
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:ouuan, akakw1, Ir1d, partychicken, Xeonacid
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用