本文經過與VSCode做對比,來簡單地介紹Emacs的基本功能、特色,以及一些插件。本文所說的Emacs指的是GNU Emacs,下文簡稱Emacs。git
接下來經過與VSCode做對比,來直觀地感覺一下Emacs的基本功能。程序員
Emacs的官網上有一張應用截圖github
第一眼看起來和VSCode仍是很是不同的正則表達式
默認的Emacs界面上也會有菜單欄、工具欄,以及底下的狀態欄(在Emacs中其實這一行叫作mode line),這些元素在VSCode上也能夠找到。VSCode通常給人的印象還有側邊欄、資源管理器視圖,以及minimap視圖。Emacs的默認底色是白色,而VSCode則是黑色。shell
Emacs有着豐富的快捷鍵(在Emacs中稱之爲key binding),但一些常見的功能的快捷鍵與VSCode等其它軟件並不相同,以下表所示編程
Emacs | VSCode | |
---|---|---|
新建文件 | ⌃x ⌃f |
⌘n |
打開文件或目錄 | ⌃x ⌃f |
⌘o |
保存文件 | ⌃x ⌃s |
⌘s |
另存爲 | ⌃x ⌃w |
⇧⌘s |
撤銷 | ⌃x u |
⌘z |
剪切 | ⌃w |
⌘x |
複製 | ⌥w |
⌘c |
粘貼 | ⌃y |
⌘v |
查找 | ⌃s |
⌘f |
在上表中,⌃
表示control
鍵、⌘
表示Mac上的command
鍵、⇧
表示shift
鍵,⌥
表示Mac上的option
鍵。此外,在Emacs中還可使用control
鍵搭配pnbf
來上下左右移動光標,不須要移動手臂即可以在編輯的文件中處處移動,提升效率。VSCode也可使用Emacs風格的快捷鍵,以下圖所示編程語言
VSCode自帶美觀大方的標籤頁功能,此外還能夠將編輯器橫向及縱向拆分,以下圖所示編輯器
Emacs默認是沒有標籤頁的功能的,但也支持切割編輯器,好比在下圖中,就將編輯器分爲左右兩部分,而且左側還被分爲了上下兩部分,這三個區域能夠展現相同或不一樣的三個文件。函數
VSCode支持很是多的編程語言,點擊窗口右下角的語言模式即可以看到這份清單工具
Emacs雖然沒有這麼一份清單,但支持的語言的數量也是不遑多讓的。不過僅僅是默認的Emacs的話,對編程語言的支持沒有VSCode那麼開箱即用。例如,比起Emacs,VSCode默認對JavaScript的支持就很好,不只僅有語法高亮、自動補全,而且還有基於變量類型、函數定義,以及導入的模塊等信息實現的智能補全,而Emacs只有平凡的基於文本的語法高亮和自動補全罷了。
除了按下⌘f
在文件內搜索以外,VSCode左側工具欄中有一個名爲搜索的入口,能夠實如今打開的項目的全部文件中搜索特定內容的功能,而且還能用於替換。Emacs儘管沒有這麼一個GUI入口,但提供了grep
命令來作到一樣的事情。
在Emacs中按下⌥x
後輸入grep
並按回車,便會在minibuffer中等待使用者的進一步輸入
顯然,這是直接調用了同名的命令行程序grep
來實現搜索的,控制選項比VSCode的搜索功能要豐富許多。
git能夠說已經成爲了平常開發中不可或缺的一個工具,若是可以在編輯器內方便地調用git的話會大大提升效率。VSCode經過左側工具欄的源代碼管理入口提供了這個功能,在Emacs中則是經過一個叫作VC dir
的主模式提供這個功能。
在Emacs中按下快捷鍵⌃x v d
,而後輸入使用git管理的項目的目錄地址,便會打開一個新的編輯區域
當處於這個模式下時,會有一些新的快捷鍵能夠用,好比將光標移動到顯示edited
的行上按下等號鍵,能夠打開另外一個編輯區域查看該文件的修改內容;按下m
鍵能夠選中光標所在行的文件,而後按v
鍵打開一個新的編輯區域來填寫commit message,寫完以後按下⌃c ⌃c
提交(即調用git commit
命令);最後按下q
鍵能夠退出VC dir
模式的編輯區域。
在VSCode中經過選中頂部菜單的「查看」,再點擊「集成終端」,即可以打開命令行,而後像平時在其它的終端模擬器中那樣使用命令。Emacs中也能夠打開終端,方法是按下快捷鍵⌥x
而後輸入eshell
並回車,而後Emacs便會在當前窗口中打開一個名爲*eshell*
的編輯區域,顯示命令行提示符和閃爍的光標,並等待使用者的進一步交互。
有意思的是,這不是一個真正的命令行程序。好比在*eshell*
中輸入which pwd
,輸出結果是eshell/pwd is a compiled Lisp function in ‘em-dirs.el’.
。也就是說,eshell
中的某一些命令是Emacs從新實現的;此外,在*eshell*
中能夠運行Emacs的擴展語言——ELisp。好比輸入(+ 1 1)
並按下回車,會輸出2。
VSCode有一個插件市場
Emacs也有一個,不過得認可這個網頁確實沒有VSCode陣營的吸引人
在Emacs中按下⌥x
後輸入package-install
回車,Emacs會等待用戶輸入要安裝的插件的名字——能夠按下⇥
鍵(Mac上的tab鍵)讓Emacs嘗試自動補全。確認名字無誤後再按回車即可以安裝使用了——但通常還須要作一些微調。
除了上面與VSCode對比的一些基本操做之外,Emacs還有自身的一些特點功能,更有世上的衆多優秀程序員爲Emacs貢獻了不勝枚舉的優秀插件,它們極大地擴展了Emacs的能力,提高了文字編輯這項活動的效率,甚至超越了文字編輯。
Emacs也能夠安裝顏色主題來改變外觀。我比較喜歡的一款主題是gruvbox-light-soft
,只須要在Emacs的配置文件中寫上(load-theme 'gruvbox-light-soft t)
便可啓用。在這個主題的倉庫主頁能夠看到一些效果圖。
Emacs能夠用純鍵盤的操做,將光標當前所在的行移到窗口的中間來顯示。我特別喜歡這個功能,以前用VSCode時候一直想找這個功能的等價物,惋惜沒找着。在Emacs中,按下一次control+l
,光標所在的行就會移動到窗口的中間;按下第二次,則移動到窗口的頂部展現;再按一次,會去到窗口的底部。若是再按一次,那麼就跟第一次同樣回到窗口的中間。每當Emacs正在編輯的內容已經去到屏幕上較低的位置時,我便會用這個功能校訂一下。
比起用鼠標拖動滾動條或者用滾輪來滾動,我更喜歡這種表意更清晰的方式。
在Emacs中能夠用單擊鼠標右鍵的方式來選中一片區域。當按下鼠標右鍵的時候,從光標所在的位置開始,到鼠標點擊的位置結束的內容便會被選中。但我我的更喜歡純鍵盤的操做,首先是在要選中的內容的起點按下快捷鍵⌃@
,這時候Emacs會在minibuffer中打印一條Mark set
的消息。而後移動光標——用方向鍵仍是用一系列的快捷鍵,甚至直接跳轉到某一行也能夠——到待選中的內容的終點。這時候加在起點和終點間的內容便會被選中,它們會有特殊的背景色,以下動圖所示
由於按⌃@
實在是太彆扭了,因此我將這個快捷鍵修改成了⌥␣
。若是更喜歡鼠標操做的話,也能夠像在VSCode中那樣,在終點按住shift
鍵再單擊鼠標左鍵。
在VSCode中按住shift
和option
鍵,再單擊鼠標右鍵並拖動就能夠選中一片矩形的區域,在Emacs中也支持這樣的矩形編輯的功能。像下圖這樣,先定位到要選中爲矩形區域的左上角按下⌃@
,再移動光標到目標矩形區域的右下角,最後按下快捷鍵⌃x r k
便可。
Emacs自己支持跳轉到指定的某一行,只須要按下快捷鍵⌥g ⌥g
而後輸入行號並回車便可。但我通常是不顯示行號的,因此這個功能其實比較少用。我使用一個名爲avy的插件來加強跳轉功能,主要用的是它提供的avy-goto-line
函數。依照這個插件的文檔,我爲這個函數配置了快捷鍵⌥g f
,所以當我想要快速地跳轉到屏幕上可見的區域中、離光標所在位置稍微有點遠的行時,我便按下這個快捷鍵,而後按照提示按下相應的英文字母鍵既可,具體效果參見下面的演示
VSCode中有一個叫作REST Client的插件,Emacs中則是有一個叫作restclient.el的主模式。藉助於restclient.el
即可以直接在一個文本文件中寫好本身要發出的HTTP請求的內容,而後一鍵觸發。以前我是用Insomnia這個工具的,儘管它很強大,但不少時候我不須要那麼強大的功能,並且Insomnia消耗內存比較多,因而我便回到restclient.el
上了。restclient.el
的效果大體以下圖所示
儘管Emacs自帶了VC dir
這個主模式,但我更喜歡用magit這個插件,尤爲是它的magit-discard
功能,能夠在查看代碼的差別的過程當中方便地捨棄一些沒必要要的修改(例如添加一行console.log
的調用)。例以下圖,經過按下n
將光標移動到某一片修改上再按下k
鍵,Emacs便會詢問使用者是否要「丟棄」這一塊改動。若是按下y
,那麼這一塊被選中的區域的內容便會恢復到git當中未修改的狀態。
Emacs默認的搜索使用的是search-forward
函數,插件swiper提供的功能更強大——不只能夠是字符串的徹底匹配,也能夠基於正則表達式來搜索,而且展現效果更直觀,以下圖所示
VSCode自帶了一個「用戶代碼片斷」的功能(經過頂部菜單「Code」,再選中「首選項」能夠看到),能夠用來定義一些短語,這些短語會在被選中的時候展開爲完整的內容。Emacs有一個名爲yasnippet的插件也提供了相似的功能,但定義代碼片斷的語法不一樣。而且,yasnippet
支持在短語的定義中嵌入ELisp代碼,擴展性遠遠高於只能使用字符串及佔位符的VSCode的等價功能。
Emacs還有許多有意思的插件,好比dimmer.el,可讓當前沒有得到焦點的窗口顯示得黯淡一點;ledger-mode,能夠用Emacs來記帳。這裏就不一一列舉了,各位有興趣的話能夠本身摸索Emacs,相信會遇到本身喜歡的插件的。
比起家大業大的VSCode,Emacs算不上是開箱即用。它沒有VSCode那麼友好的界面和平易近人的操做方式,人氣也沒有VSCode那麼旺,當遇到問題的時候可能沒那麼好求助到人,而且學習曲線(小衆的預設快捷鍵、冷門的擴展語言)也比較高。但Emacs的擴展能力很強,現有的插件已經很豐富了,能夠知足大部分的需求,遇到問題也能夠到有模有樣的論壇求助。若是喜歡折騰的話,Emacs會是一個不錯的選擇,至少我本身用得很開心。