學(xué)習(xí)GNU Emacs
1 GNU Emacs介紹
Emacs編輯器是最受歡迎、傳播范圍最廣、也是最強(qiáng)大和最靈活的UNIX文本編輯器。與其他文本編輯器的重要區(qū)別在于它是一個(gè)完備的工作環(huán)境,使用Emacs可以完成各種日常工作。對很多Emacs用戶來說,Emacs已經(jīng)超越了編輯器的范疇,使用Emacs是一種文化,一種生活。 GNU Emacs是GNU開發(fā)的Emacs變體,也是最廣泛使用的Emacs編輯器。本文將以GNU Emacs為例講解GNU Emacs編輯器的使用和技巧。首先介紹一下常用的快捷鍵,接著介紹GNU Emacs擴(kuò)展,最后是.emacs文件的配置。
2 快捷鍵
GNU Emacs的快捷鍵都是綁定于CTRL鍵和ALT鍵上。每個(gè)快捷鍵對應(yīng)一個(gè)指令名稱,也就是一個(gè)對應(yīng)的函數(shù)名稱,這允許你根據(jù)不同的喜好將快捷鍵綁定到不同的指令名稱。另外,在Emacs中有很多的指令沒有綁定快捷鍵,我們可以通過M-x 指令名稱來執(zhí)行指令。例如,全文替換我們可以使用M-x replace-strings。這樣,很多沒有綁定快捷鍵的功能都可以用到了。
2.1 基本操作
表1是基本操作指令列表。
表1 基本操作指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-SP | set-mark-command | 設(shè)置標(biāo)記 | C-q | quoted-insert | 插入引用 |
C-a | beginning-of-line | 移動(dòng)到行首 | C-r | isearch-backward | 向前查找 |
C-b | backward-char | 向前移動(dòng)一個(gè)字符 | C-s | isearch-forward | 向后查找 |
C-t | transpose-chars | 掉換前后二個(gè)字符位置 | C-d | delete-char | 刪除一個(gè)字符 |
C-e | end-of-line | 移動(dòng)到行尾 | C-v | scroll-up | 向下滾動(dòng)一屏 |
C-f | forward-char | 向后移動(dòng)一個(gè)字符 | C-w | kill-region | 刪除選定區(qū)域 |
C-x < | scroll-left | 向左移動(dòng)一屏 | C-x > | scroll-right | 向右移動(dòng)一屏 |
TAB | forward-button | 縮進(jìn) | C-y | yank | 粘貼 |
C-z | suspend-frame | 暫停emacs | C-n | next-line | 移動(dòng)到下一行 |
C-k | kill-line | 刪除一行 | ESC | ESC-prefix | 取消前綴 |
C-o | open-line | 增加一行 | DEL | delete-backward-char | 向前刪除一個(gè)字符 |
C-p | previous-line | 向上移動(dòng)一行 | C-z | suspend-emacs | 暫停Emacs |
C-_ | undo | 取消 | C-l | recenter | 使光標(biāo)所在行變?yōu)槠聊恢醒?/td> |
2.2 幫助
表2是幫助指令列表。
表2 幫助指令
|
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-h w | where-is | 查看命令菜單位置或者綁定熱鍵 | C-h k | describe-key | 查看熱鍵詳細(xì)功能描述 |
C-h t | help-with-tutorial | 查看Emacs教程 | C-h c | describe-key-briefly | 查看熱鍵簡單功能描述 |
C-h n | view-emacs-news | 瀏覽Emacs新聞 | C-h b | describe-bindings | 查看綁定熱鍵 |
C-h m | describe-mode | 查看編輯模式 | C-h C-c | | 查看許可證信息 |
C-h ? | help-for-help | 查看幫助列表 | | | |
2.3 緩沖區(qū)操作
表3是緩沖區(qū)操作指令列表。
表3 緩沖區(qū)操作指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-x C-d | list-directory | 列出當(dāng)前目錄 | C-x = | what-cursor-position | 顯示當(dāng)前光標(biāo)所在位置 |
C-x C-f | find-file | 查找文件 | C-x TAB | indent-rigidly | 強(qiáng)制縮進(jìn) |
C-x C-o | delete-blank-lines | 刪除空白行 | C-x b | list-buffers | 打開另外一個(gè)緩沖區(qū) |
C-x C-p | mark-page | 全選 | C-x C-r | find-file-read-only | 以只讀方式打開文件 |
C-x C-s | save-buffer | 保存當(dāng)前緩沖區(qū) | C-x i | insert-file | 插入文件 |
C-x C-t | transpose-lines | 掉換前后行位置 | C-x h | mark-whole-buffer | 標(biāo)記當(dāng)前全部緩沖區(qū) |
C-x C-v | find-alternate-file | 打開另外一個(gè)文件,關(guān)閉緩沖區(qū) | C-x l | count-lines-page | 計(jì)算當(dāng)前緩沖區(qū)行數(shù) |
C-x C-w | write-file | 保存緩沖區(qū)內(nèi)容到文件 | C-x k | kill-buffer | 關(guān)閉緩沖區(qū) |
C-x m | mail | 寫Email | C-x 4 m | mail-other-window | 打開新窗口寫Email |
C-x s | save-some-buffers | 保存多個(gè)文件 | C-x u | advertised-undo | 取消上一步操作 |
2.4 宏操作
表4是宏操作指令列表。
表4 宏操作指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-x ( | start-kbd-macro | 開始錄制宏 | C-x ) | end-kbd-macro | 結(jié)束宏錄制 |
C-x e | call-last-kbd-macro | 執(zhí)行上一次綁定的宏命令 | | | |
2.5 窗口操作
表5是窗口操作指令列表。
表5 窗口操作指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-x 0 | delete-window | 關(guān)閉當(dāng)前窗口 | C-x 1 | delete-other-windows | 保留當(dāng)前窗口,關(guān)閉其他窗口 |
C-x 2 | split-window-vertically | 水平分割窗口 | C-x 3 | split-window-horizontally | 垂直分割窗口 |
2.6 C語言編程模式
表6是C語言編程模式的指令列表。
表6 C語言編程模式指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
M-a | backward-sentence | 移動(dòng)到語句開頭 | M-e | forward-sentence | 移動(dòng)到語句結(jié)尾 |
C-M-a | beginning-of-defun | 移動(dòng)到函數(shù)開頭 | C-M-e | end-of-defun | 移動(dòng)到函數(shù)結(jié)尾 |
2.7 SGML語言編程模式
表7是SGML語言編程模式指令列表。
表7 SGML語言編程模式指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-c C-t | sgml-tag | 插入標(biāo)記 | C-c C-a | sgml-attributes | 插入屬性 |
C-c C-b | sgml-skip-tag-backward | 移動(dòng)到前一個(gè)標(biāo)記 | C-c C-f | sgml-skip-tag-forward | 移動(dòng)到后一個(gè)標(biāo)記 |
C-c DEL | sgml-delete-tag | 刪除一個(gè)標(biāo)記 | | | |
2.8 版本控制命令
表8是版本控制指令列表。
表8 版本控制指令
快捷鍵 | 指令名稱 | 用途 | 快捷鍵 | 指令名稱 | 用途 |
---|
C-x v d | vc-directory | 列出目錄下修改過的文件 | C-x v = | vc-diff | 顯示改動(dòng) |
C-x v l | vc-print-log | 顯示改動(dòng)歷史記錄 | C-x v i | vc-register | 加入文件到版本控制中 |
C-x v h | vc-insert-headers | 插入版本控制信息 | C-x v r | vc-retrieve-snapshot | 取某一版本文件 |
C-x v v | vc-next-action | 進(jìn)入提交改動(dòng)狀態(tài) | | | |
3 GNU Emacs擴(kuò)展
3.1 Emacs Lisp語言介紹
3.2 有用的GNU Emacs擴(kuò)展
3.3 寫一個(gè)GNU Emacs擴(kuò)展
這里我們自己動(dòng)手寫一個(gè)GNU Emacs擴(kuò)展,實(shí)現(xiàn)復(fù)制一行的功能。下面是實(shí)現(xiàn)這個(gè)擴(kuò)展的代碼。
(defun copy-line (&optional arg)
"Save current line into Kill-Ring without mark the line"
(interactive "P")
(let ((beg (line-beginning-position))
(end (line-end-position arg)))
(copy-region-as-kill beg end))
)
將上面這段代碼拷貝到.emacs中,就可以開始使用這個(gè)功能了。4 .emacs文件
4.1 樣例
;;顯示時(shí)間
(display-time)
;;顯示行號(hào)
(column-number-mode t)
(show-paren-mode t)
;;設(shè)置TAB寬度為4
(setq default-tab-width 4)
;;以下設(shè)置縮進(jìn)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-basic-offset 4)
(global-set-key "\C-m" 'reindent-then-newline-and-indent)
(setq indent-tabs-mode nil)
(setq standard-indent 4)
;;開啟語法高亮。
(global-font-lock-mode 1)
;;設(shè)置默認(rèn)工作目錄
(setq default-directory "/home/test/source/")
;; 去掉滾動(dòng)條
(set-scroll-bar-mode nil)
;;關(guān)閉開啟畫面
(setq inhibit-startup-message t)
(setq indent-tabs-mode t)
;;不產(chǎn)生備份文件
(setq make-backup-files nil)
;;設(shè)置自定義變量
(custom-set-variables
'(column-number-mode t)
'(current-language-environment "UTF-8")
'(display-time-mode t)
'(ecb-options-version "2.32")
'(mouse-1-click-in-non-selected-windows t)
'(mouse-drag-copy-region t)
'(mouse-yank-at-point t)
'(save-place t nil (saveplace))
'(show-paren-mode t)
'(transient-mark-mode t))
(custom-set-faces
;;選擇小工具欄圖標(biāo)
(tool-bar-mode -1)
5 總結(jié)
6 參考資料