這些年也用過(guò)不少的編輯器酵镜、IDE,在使用各個(gè)編輯器的時(shí)候也多多少少鼓搗過(guò)各個(gè)編輯器的插件柴钻、擴(kuò)展淮韭,比如Eclipse插件、Notepad++插件贴届、Sublime插件等靠粪,對(duì)于"插件蜡吧、擴(kuò)展"這種能夠延伸編輯器手和腳的方式很是興趣盎然,而且用自己寫(xiě)出的插件可以極大地提高生產(chǎn)力占键,從而帶來(lái)一種莫名的滿(mǎn)足感昔善。
于是Emacs以其強(qiáng)大的擴(kuò)展性吸引了我,開(kāi)始入坑Emacs畔乙,Emacs還是自由軟件之父理查德·斯托曼大師的作品君仆,其質(zhì)量肯定是有保障的。本文主要總結(jié)一下最常用的Emacs操作牲距,至于Emacs有多厲害返咱、如何安裝、如何......嗅虏,網(wǎng)上的資料鋪天蓋地(比如開(kāi)篇推薦的那篇文章)洛姑,不在本文的討論范圍之內(nèi)。
按鍵約定
組合按鍵
Emacs中大量的按鍵操作都是各式各樣的組合按鍵(快捷鍵)皮服,下面是幾種通常的約定:
-
Ctrl
鍵:表示為C
-
Alt
鍵:表示為M
-
Shift
鍵:表示為S
- 組合按鍵:比如向下移動(dòng)一行的組合按鍵是
Ctrl+n
楞艾,就表示為:C-n
,其含義表示同時(shí)按下鍵盤(pán)上的Ctrl
和n
鍵龄广。
按鍵順序
有時(shí)候用多個(gè)組合按鍵來(lái)表示一種操作硫眯,比如以下按鍵序列:C-x C-f [文件路徑] <RET>
就表示打開(kāi)文件
的操作,它表示這樣的操作含義:先同時(shí)按下Ctrl
和x
鍵择同,然后松開(kāi)两入,緊接著馬上再同時(shí)按下Ctrl
和f
鍵,然后再松開(kāi)敲才,然后在下方的輸入欄中輸入文件路徑裹纳,輸入完之后按回車(chē)鍵(用<RET>
表示),最后就打開(kāi)了一個(gè)文件紧武。
還有一種按鍵順序:C-x o
剃氧,表示切換到另外一個(gè)緩沖區(qū),它是這樣一組按鍵:先同時(shí)按下Ctrl
和x
鍵阻星,然后松開(kāi)朋鞍,然后緊接著按字母o
鍵。
還有另外一種按鍵順序妥箕,比如以下按鍵序列:C-u [10] C-p
滥酥,就表示這樣的操作含義:先同時(shí)按下Ctrl
和u
鍵,然后松開(kāi)畦幢,然后依次按1
和0
鍵坎吻,然后松開(kāi),最后再同時(shí)按Ctrl
和p
鍵宇葱。這組按鍵達(dá)到的效果就是把光標(biāo)從當(dāng)前位置往上移動(dòng)10行禾怠。
特殊按鍵
- 表示輸入內(nèi)容返奉,用方括號(hào)括起來(lái):
[輸入的內(nèi)容]
- 表示回車(chē)鍵:
<RET>
- 表示其他鍵:比如
<Backspace>
表示退格鍵(刪除鍵)贝搁,<Delete>
表示刪除鍵吗氏,<TAB>
表示TAB鍵,<Left>
表示左箭頭鍵雷逆,<Right>
表示右箭頭鍵弦讽,<Up>
表示上箭頭鍵,<Down>
表示下箭頭鍵膀哲,<f5>
表示F5鍵往产。
Quick Start
文本操作,無(wú)外乎打開(kāi)文件某宪、編輯文件仿村、保存文件,涉及的核心兴喂、最高頻命令非常簡(jiǎn)單蔼囊,整理如下:
-
C-x C-f [文件路徑] <RET>
:打開(kāi)一個(gè)文件 -
C-n
:將光標(biāo)向下移動(dòng)一行 -
C-p
:將光標(biāo)向上移動(dòng)一行 -
C-g
:取消之前的按鍵(將會(huì)成為最常用的按鍵之一) -
C-x C-s
:保存文件 -
C-x C-c
:退出Emacs
常用操作分類(lèi)匯總
文件操作
-
C-x C-f [文件路徑] <RET>
:打開(kāi)一個(gè)文件 -
C-x C-s
:保存文件 -
C-x 4 f [文件路徑] <RET>
:在一個(gè)新的窗格(緩沖區(qū))中打開(kāi)文件 -
C-x 5 f [文件路徑] <RET>
:在一個(gè)新的窗口中打開(kāi)文件
移動(dòng)操作
-
C-n
:將光標(biāo)向下移動(dòng)一行 -
C-p
:將光標(biāo)向上移動(dòng)一行 -
C-b
:將光標(biāo)左移一個(gè)字符 -
C-f
:將光標(biāo)右移一個(gè)字符 -
M-f
:將光標(biāo)右移一個(gè)單詞 -
M-b
:將光標(biāo)左移一個(gè)單詞 -
C-v
:向下移動(dòng)一屏 -
M-v
:向上移動(dòng)一屏 -
C-l
:將當(dāng)前光標(biāo)所在行移動(dòng)到屏幕中央(注意:這里是字母L
) -
C-a
:將光標(biāo)移到行首 -
C-e
:將光標(biāo)移到行尾 -
M-S-<
:將光標(biāo)移動(dòng)到文件開(kāi)頭 -
M-S->
:將光標(biāo)移動(dòng)到文件末尾 -
M-m
:將光標(biāo)移動(dòng)到行首的第一個(gè)非空白字符
查找與替換操作
-
C-s [查找的內(nèi)容]
:向前查找 -
C-r [查找的內(nèi)容]
:向后查找 -
C-M-s [查找的內(nèi)容]
:向前正則查找 -
C-M-r [查找的內(nèi)容]
:向后正則查找 -
M-S-%
:查找并替換,操作步驟如下:按下M-S-%
鍵啟動(dòng)查找替換衣迷,輸入要被替換的詞畏鼓,回車(chē),然后輸入要替換的詞壶谒,再回車(chē)云矫。被替換的詞此時(shí)會(huì)高亮起來(lái),這時(shí)汗菜,輸入y替換并跳到下一個(gè)让禀,輸入n忽略并跳到下一個(gè),輸入q結(jié)束陨界,輸入巡揍!替換剩下的全部。
文本選擇操作
-
C-S-e
:選中從當(dāng)前位置到行尾的文本 -
C-S-n
:從當(dāng)前位置開(kāi)始往下選中一行文本 -
C-S-p
:從當(dāng)前位置開(kāi)始往上選中一行文本 -
C-S-f
:從當(dāng)前位置開(kāi)始往后選中一個(gè)字符 -
C-S-b
:從當(dāng)前位置開(kāi)始往前選中一個(gè)字符 -
M-S-f
:從當(dāng)前位置開(kāi)始往后選中一個(gè)單詞 -
M-S-b
:從當(dāng)前位置開(kāi)始往前選中一個(gè)單詞 -
M-S-e
:選中從當(dāng)前位置開(kāi)始到當(dāng)前句尾的文本 -
M-S-a
:選中從當(dāng)前位置開(kāi)始到當(dāng)前句首的文本 -
C-S-@ [其他移動(dòng)操作]
:從一個(gè)起始位置普碎,選中連續(xù)的字符吼肥,比如C-S-@ C-e
就表示選中從當(dāng)前光標(biāo)位置到行尾的所有字符 -
C-S-v
:向下選擇一屏 -
M-S-v
:向上選擇一屏 -
C-S-l
:讓當(dāng)前光標(biāo)所在行居中 -
C-x h
:全選
文本編輯操作
- 插入文本:只要光標(biāo)在當(dāng)前緩沖區(qū),就可以直接輸入插入文本麻车。
-
C-k
:刪除光標(biāo)到行尾的所有字符 -
C-u [N] [操作序列]
:重復(fù)執(zhí)行一個(gè)操作序列N次 -
C-/
或C-x u
:撤銷(xiāo)(undo)上次操作缀皱,多次按可以撤銷(xiāo)之前的多次操作 -
C-g C-/
:重做(redo),用于重做上次的撤銷(xiāo)動(dòng)作(撤銷(xiāo)之后后悔了动猬,想恢復(fù)重做) -
<Backspace>
:刪除當(dāng)前光標(biāo)前的一個(gè)字符 -
C-<Backspace>
:刪除當(dāng)前光標(biāo)前的一個(gè)單詞 -
C-d
或<Delete>
:刪除當(dāng)前光標(biāo)后的一個(gè)字符 -
M-<Backspace>
:剪切當(dāng)前光標(biāo)前的一個(gè)字符到剪貼板 -
M-d
:剪切當(dāng)前光標(biāo)后的一個(gè)字符到剪貼板 -
C-k
:剪切從光標(biāo)到行尾的字符到剪貼板 -
C-y
:粘貼剪貼板中的文本到當(dāng)前光標(biāo)位置 -
M-w
:復(fù)制當(dāng)前選中的字符 -
C-w
:剪切當(dāng)前選擇的字符到剪貼板 -
C-a C-k
:剪切一整行到剪貼板中啤斗,其實(shí)也可以用于刪除一整行 -
C-e <RET>
:在當(dāng)前行下方插入一空行 -
C-x C-q
:讓當(dāng)前buffer在“只讀”和“讀寫(xiě)”兩種編輯模式之間切換
多窗格與多窗口
首先要明確一下Emacs中窗格與窗口的概念的區(qū)別:每個(gè)窗格其實(shí)就是一個(gè)緩沖區(qū),一個(gè)窗口中可以同時(shí)打開(kāi)多個(gè)窗格赁咙,而窗口就是像Windows那樣的GUI窗口钮莲。
-
C-x 1
:僅保留當(dāng)前窗格免钻,關(guān)閉其他窗格 -
C-x 2
:在垂直方向打開(kāi)2個(gè)窗格 -
C-x 3
:在水平方向打開(kāi)2個(gè)窗格 -
C-x o
:在不同窗格之間切換 -
C-x 0
:關(guān)閉當(dāng)前窗格 -
C-x S-{
:減小當(dāng)前窗格的水平寬度 -
C-x S-}
:縮小當(dāng)前窗格的水平寬度 -
C-x S-^
:增大當(dāng)前窗格的垂直高度 -
C-M-v
:在另一個(gè)窗格中向下滾動(dòng)一屏(但光標(biāo)還保留在當(dāng)前窗格) -
C-M-S-v
:在另一個(gè)窗格中向上滾動(dòng)一屏(但光標(biāo)還保留在當(dāng)前窗格) -
M-x make-frame
:打開(kāi)一個(gè)新窗口 -
M-x delete-frame
:關(guān)閉當(dāng)前窗口 -
C-z
:掛起當(dāng)前的窗口(相當(dāng)于最小化當(dāng)前的窗口)
文本編碼
-
M-x describe-coding-system <RET>
:查看當(dāng)前緩沖區(qū)的編碼格式 -
C-x <RET> r <TAB>
:列出當(dāng)前的所有編碼 -
C-x <RET> f utf-8 <RET>
:改變當(dāng)前緩沖區(qū)的編碼為utf-8
命令與函數(shù)操作
-
M-x [函數(shù)名] <RET>
:執(zhí)行一個(gè)函數(shù) -
M-S-! [命令] <RET>
:執(zhí)行一個(gè)命令行命令 -
M-x shell <RET>
:在一個(gè)新窗格中、當(dāng)前目錄位置打開(kāi)命令行
一些常用操作
-
M-x goto-line <RET> [行號(hào)] <RET>
:跳轉(zhuǎn)到某一行崔拥,將其綁定到快捷鍵C-c j
:
;; 快速跳到某一行
(global-set-key (kbd "C-c j") 'goto-line)
-
M-x electric-pair-mode <RET>
:打開(kāi)括號(hào)配對(duì)模式
緩沖區(qū)
-
C-x C-b
:在一個(gè)新窗格中列出當(dāng)前所有的緩沖區(qū) -
C-x b xxx <RET>
:切換到名為xxx
的緩沖區(qū) -
C-x k xxx <RET>
:關(guān)閉一個(gè)名為xxx
的緩沖區(qū)(如果直接按回車(chē)极舔,默認(rèn)關(guān)閉的是當(dāng)前緩沖區(qū)) -
C-x s
:一個(gè)個(gè)詢(xún)問(wèn)是否保存當(dāng)前每個(gè)緩沖區(qū)的內(nèi)容 -
M-x kill-some-buffers <RET>
:一個(gè)個(gè)詢(xún)問(wèn)是否關(guān)閉當(dāng)前打開(kāi)的緩沖區(qū) -
C-x <Left>
:在多個(gè)緩沖區(qū)之間切換 -
C-x <Right>
:在多個(gè)緩沖區(qū)之間切換
配置相關(guān)
-
C-x d S-~ <RET>
:打開(kāi)Emacs配置文件所在路徑 -
C-h v load-path <RET>
:查看Emacs的加載路徑
幫助操作
-
C-h t
:查看Emacs快速指南 -
C-h f
:查看一個(gè)函數(shù)(命令)的幫助文檔 -
C-h S-?
或M-x [help]
:查看幫助 -
C-h c [命令序列]
:顯示命令序列對(duì)應(yīng)的函數(shù)名 -
C-h k [命令序列]
:顯示命令序列的詳細(xì)文檔(打開(kāi)一個(gè)新窗格) -
C-h a [關(guān)鍵詞]
:打開(kāi)一個(gè)新窗格列出所有含有此關(guān)鍵詞的命令 -
C-h i
:查看信息字典文檔 -
C-h r
:查看使用手冊(cè) -
C-h m
:查看當(dāng)前緩沖區(qū)的major mode和minor mode及其介紹 -
C-h b
:查看和當(dāng)前緩沖區(qū)綁定的快捷鍵列表 -
C-h v [變量名]
:查看某個(gè)變量的值 -
C-h w [函數(shù)名]
:查看某個(gè)函數(shù)綁定的快捷鍵 -
C-h i m [elisp] <RET>
:查看elisp文檔
命令行操作
以下操作都是在系統(tǒng)命令行中的操作:
-
emacs -nw -Q
:在命令行中打開(kāi)Emacs,-nw
參數(shù)表示:no window
链瓦,-Q
參數(shù)表示:不顯示歡迎界面拆魏。在命令行打開(kāi)Emacs后,各項(xiàng)操作和按鍵與在GUI窗口中是一致的
配置文件基本用法
配置文件的位置
emacs配置文件有兩個(gè)位置:~/.emacs
和~/.emacs.d/init.el
慈俯,下面以~/.emacs.d/init.el
為例進(jìn)行說(shuō)明(如果不存在渤刃,則自行創(chuàng)建一個(gè)該文件即可)。為了不產(chǎn)生影響贴膘,需要把~/.emacs
這個(gè)文件刪掉卖子。
打開(kāi)配置文件的快捷鍵
在emacs中打開(kāi)配置文件所在的路徑(~/.emacs.d
)有一個(gè)快捷鍵:C-x d S-~ <RET>
修改配置文件并使之生效
打開(kāi)emacs的配置文件~/.emacs.d/init.el
,在文件的最后追加一行內(nèi)容并保存:
;; 默認(rèn)顯示行號(hào)
(global-linum-mode 1)
然后執(zhí)行M-x load-file <RET> init.el
操作使得配置文件生效刑峡。這時(shí)再看打開(kāi)的文本文件洋闽,就會(huì)發(fā)現(xiàn)左邊多出來(lái)了行號(hào)。
把打開(kāi)氛琢、加載配置文件的操作綁定到自定義的快捷鍵上
在配置文件init.el后面追加下面的代碼并保存:
;; 定義一個(gè)函數(shù):快速打開(kāi)配置文件
(defun open-init-file()
(interactive)
(find-file "~/.emacs.d/init.el"))
;; 把函數(shù)open-init-file綁定到快捷鍵<F2>鍵上
(global-set-key (kbd "<f2>") 'open-init-file)
;; 快速加載init.el
(global-set-key (kbd "C-<f5>") 'load-file)
執(zhí)行M-x load-file <RET> init.el
操作使得配置文件生效喊递,這時(shí)再按<F2>
鍵就可以直接快速打開(kāi)init.el配置文件了,再次修改init.el文件后阳似,也可以直接按快捷鍵C-<f5>
使配置生效了骚勘。
把大小寫(xiě)切換鍵變?yōu)镃trl鍵
在一般的鍵盤(pán)上,Ctrl
鍵位于左下角撮奏,需要用左手的小拇指去按俏讹,不是很順手,而emacs的很多組合按鍵都需要用到Ctrl
鍵畜吊,就會(huì)帶來(lái)一定的不便泽疆。不過(guò)可以發(fā)現(xiàn),用左手的小拇指去按Caps Lock
大小寫(xiě)切換鍵還是很順手的玲献,那么能不能把Caps Lock
鍵變成Ctrl
鍵呢殉疼?
答案是可以的,這個(gè)時(shí)候可以使用autohotkey
這樣一款軟件把Caps Lock
鍵變成Ctrl
鍵捌年,并且只在打開(kāi)emacs時(shí)生效瓢娜,不影響在其他軟件中的按鍵操作。在Windows系統(tǒng)的用法如下:
- 到autohotkey的下載頁(yè)面下載最新的zip包到本地礼预,解壓縮眠砾。
- 復(fù)制下面代碼,保存為一個(gè)文件托酸,命名為
caps2ctrl.ahk
:
#IfWinActive emacs ; if in emacs
Control::Capslock ; make Control the Caps Lock button
Capslock::Control ; make Caps Lock the control button
#IfWinActive ; end if in emacs
- 把
caps2ctrl.ahk
文件復(fù)制到剛剛解壓縮得到的文件夾下的Compiler子文件中褒颈,在這個(gè)文件夾位置打開(kāi)cmd命令行柒巫,輸入命令:Ahk2Exe.exe /in caps2ctrl.ahk /out caps2ctrl.exe
,然后就在當(dāng)前文件夾生成了一個(gè)名為caps2ctrl.exe
的可執(zhí)行文件谷丸,雙擊打開(kāi)它堡掏。
- 這時(shí)再打開(kāi)emacs,可以發(fā)現(xiàn)
Caps Lock
鍵已經(jīng)變成了Ctrl
鍵淤井。如果想切換大小寫(xiě)只需按Ctrl
鍵即可布疼。 - 退出
caps2ctrl.exe
程序即可恢復(fù)上面的修改。 -
caps2ctrl.exe
程序可以在沒(méi)有下載autohotkey
軟件的電腦上獨(dú)立使用(我已經(jīng)生成好了一個(gè)放在我的百度網(wǎng)盤(pán)里:caps2ctrl.exe.rar)币狠。要注意的是,如果是在cmd命令行中打開(kāi)emacs砾层,caps2ctrl.exe
程序是無(wú)法生效的漩绵。