作者 謝恩銘,公眾號「程序員聯盟」(微信號:coderhub)。
轉載請注明出處。
原文:http://www.lxweimin.com/p/732157b02ecc
Emacs,最強編輯器,沒有之一
小編知道,此標題一出,肯定會遭受廣大群眾“詬病”,說不好還會被其他編輯器的粉絲暗地里“干掉”。
比如,Vim,Sublime,Nano編輯器的粉絲可能就會來“踢館”,VS或Eclipse的粉絲也興許會“群起而攻”,但是小編只是表達一下自己的感受,為了效果也只能夸大一下了。
所以請拍磚的時候輕一點,雞蛋少扔幾個。如果扔的雞蛋多也請多扔幾個番茄過來,再來幾根蔥,這樣我可以做番茄炒蛋,謝謝。
有種張無忌在光明頂被6大門派“圍剿”的架勢...
對于很多人來說,使用Vim和Emacs,不僅是提升“逼格”的方式,更是上升到“信仰”的層面,夸張吧。當然這和宗教信仰不一樣,只是一種可愛的“偏執”而已。
請參看我的 Linux探索之旅 | 第五部分第一課:Vim豈是池中物,寶劍鋒從磨礪出。
不過,Emacs實在能做很多事,不要認為它只是一個文本編輯器,它可以說是一個整合環境,或可稱它為“集成開發環境”,它還可以做以下事情:
- 上網,瀏覽網頁
- 看視頻
- 收發郵件
- 調試程序,結合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
- 玩游戲
- 計算器
- 記日記
- 管理日程,Task,ToDo,約會等
- 個人信息管理
- 目錄管理
- 文件比較
- 閱讀info和man文檔
- 等等
當然了,這里主要將Emacs作為文本編輯器來介紹。
如果你要做特定開發,那還是用業界知名的IDE(集成開發環境)更加有效率。
例如開發Android應用,那必須得上Android Studio(你不要跟我說你還在用Google已經不發布支持更新的Eclipse);開發iOS應用,必須得上Xcode。
如果你用Emacs來開發這些應用,那效率太低了。
小編以前在Linux下編寫代碼是使用Vim編輯器的,也極為強大。但是自從2014年接觸到Emacs之后,就愛上了Emacs(fall in love with Emacs),Vim雖然有時還會用到(目前的公司的開發組大家基本都是用Vim,我也沒辦法只好用Vim,以方便和大家交流、演示),但其實我還是比較喜歡Emacs。
一開始我不知道為什么Emacs如此優美又強大,直到后來閱讀了《黑客與畫家》這部經典著作(硅谷創業教父 Paul Graham 保羅?格雷厄姆所寫,其實也就是他的一些日志匯編而成),里面講述了Lisp語言的強大和優美,而Emacs就是用Lisp語言編寫的,怪不得。
閑扯一下為什么Lisp語言如此強大,雖然這門語言很老了(1958年被發明),在2015年6月的TIOBE編程語言排行榜也只有第31位,但是:
摘錄自 阮一峰 翻譯的《黑客與畫家》一書,推薦大家一讀:
如果我們把流行的編程語言,以這樣的順序排列:Java、Perl、Python、Ruby。你會發現,排在越后面的語言,越像Lisp。
Python模仿Lisp,甚至把許多Lisp黑客認為屬于設計錯誤的功能,也一起模仿了。至于Ruby,如果回到1975年,你聲稱它是一種Lisp方言,沒有人會反對。
編程語言現在的發展,不過剛剛趕上1958年Lisp語言的水平。
1958年,John McCarthy設計了Lisp語言。我認為,當前最新潮的編程語言,只是實現了他在1958年的設想而已。
這怎么可能呢?計算機技術的發展,不是日新月異嗎?
1958年的技術,怎么可能超過今天的水平呢? 讓我告訴你原因。 這是因為John McCarthy本來沒打算把Lisp設計成編程語言,至少不是我們現在意義上的編程語言。他的原意只是想做一種理論演算,用更簡潔的方式定義圖靈機。
所以,為什么上個世紀50年代的編程語言,到現在還沒有過時?簡單說,因為這種語言本質上不是一種技術,而是數學。數學是不會過時的。
你不應該把Lisp語言與50年代的硬件聯系在一起,而是應該把它與快速排序(Quicksort)算法進行類比。這種算法是1960年提出的,至今仍然是最快的通用排序方法。
直到今天,最高級的主流語言,也只是剛剛接近Lisp的水平。雖然已經很接近了,但還是沒有Lisp那樣強大。
Lisp語言誕生的時候,就包含了9種新思想。其中一些我們今天已經習以為常,另一些則剛剛在其他高級語言中出現,至今還有2種是Lisp獨有的。
按照被大眾接受的程度,這9種思想依次是:
條件結構(即"if-then-else"結構)。現在大家都覺得這是理所當然的,但是Fortran I就沒有這個結構,它只有基于底層機器指令的goto結構。
函數也是一種數據類型。在Lisp語言中,函數與整數或字符串一樣,也屬于數據類型的一種。它有自己的字面表示形式(literal representation),能夠儲存在變量中,也能當作參數傳遞。一種數據類型應該有的功能,它都有。
遞歸。Lisp是第一種支持遞歸函數的高級語言。
變量的動態類型。在Lisp語言中,所有變量實際上都是指針,所指向的值有類型之分,而變量本身沒有。復制變量就相當于復制指針,而不是復制它們指向的數據。
垃圾回收機制。
程序由表達式(expression)組成。Lisp程序是一些表達式區塊的集合,每個表達式都返回一個值。這與Fortran和大多數后來的語言都截然不同,它們的程序由表達式和語句(statement)組成。
符號(symbol)類型。符號實際上是一種指針,指向儲存在哈希表中的字符串。所以,比較兩個符號是否相等,只要看它們的指針是否一樣就行了,不用逐個字符地比較。
代碼使用符號和常量組成的樹形表示法(notation)。
無論什么時候,整個語言都是可用的。Lisp并不真正區分讀取期、編譯期和運行期。你可以在讀取期編譯或運行代碼;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼。
怎么樣,是不是很有興趣了解一下如此強大的Lisp語言開發出來的Emacs是如何優美呢?
當然此文不可能帶大家領略所有Emacs的優美之處。說實話,Emacs肯定存在不足之處: 小編還是很“識相”的,不敢“冒天下之大不韙”。
更多Emacs的好處只有大家使用了才能慢慢領略。
Emacs簡介
Emacs是一種強大的文本編輯器,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎。
EMACS,即Editor MACroS(編輯器宏)的縮寫,最初由Richard Stallman(理查德·斯托曼)于1975年在MIT(麻省理工學院)協同Guy Steele共同完成。
Richard Stallman可是開源運動之父啊,我的Linux探索之旅 | 開宗明義+第一部分第一課:什么是Linux?這一課專門介紹過他。
這位可愛的長胡子大叔抵制Apple,抵制Facebook,抵制Amazon,抵制不少公司和機構。他也是自由軟件基金會(Free Software Foundation,簡稱FSF)的主席,而自由軟件基金會主導了包括GNU在內的很多開源工程。
GNU工程使得世界各地的程序員可以為Linux操作系統開發周邊軟件等,才有了Linux的今天。不然Linus Tovarlds(Linux之父)基本上光是寫了一個Linux內核,哪夠啊。所以今天的Linux最正確的稱謂應該是GNU/Linux 。
自誕生以來,Emacs演化出了眾多分支,其中使用最廣泛的兩種分別是:1984年由Richard Stallman發起并由他維護至今的GNU Emacs,以及1991年發起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當的兼容性。它們都使用了Emacs Lisp這種有著極強擴展性的編程語言,從而實現了包括編程、編譯乃至網絡瀏覽等等功能的擴展。
你可以使用Lisp語言改寫Emacs的功能組件,而且可以更改配置,完全自定義Emacs,所以Emacs是充滿無限可能的編輯器。
國際化
Emacs支持對多種文字的文本編輯,包括UTF-8在內的諸多編碼系統,加上對多種字符集、文稿、書寫系統,以及不同文化的書寫習慣都提供了支持,使得世界上大多數語言的使用者都能通過Emacs進行文本處理。
Emacs還能通過調用諸如ispell這樣的外部程序,實現多種語言的拼寫檢查。
跨平臺性
Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當前大多數操作系統上運行,包括類Unix系統(GNU/Linux、各種BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等,還有移動Android平臺以及iOS。
緩沖區的概念
初學Emacs需要理解什么是 緩沖區:
Emacs里的一切操作都發生在編輯緩沖區(buffer)里,它通常是某個文件的工作副本。如果你正在編輯的編輯緩沖區里包含著某個文件的一個副本,那么當你保存自己所做的改動時,Emacs把編輯緩沖區的內容復制到文件中。
除了工作在文件副本上的緩沖區外,還有一些做臨時工作的緩沖區,它就像一張草稿紙,當然也可以隨時使用write-file命令("C-x C-w")或save-buffer命令(“C-x C-s”)保存這類臨時工作緩沖區的內容。
小編一開始也是對緩沖區的概念一知半解,不要怕,用著用著馬上就理解了。
可以參考一些高手的Emacs教程和“練級”系列
http://www.cnblogs.com/robertzml/archive/2009/09/10/1564108.html
http://blog.csdn.net/redguardtoo/article/details/7222501/
http://blog.sina.com.cn/s/blog_6df127760101ll7a.html
http://arch.pconline.com.cn//pcedu/soft/gj/photo/0609/865628_1.html
Emacs的官網和Wiki
http://www.gnu.org/software/emacs/
目前最新版是Emacs 25.1
Emacs的中文WiKi:
http://www.emacswiki.org/emacs?interface=zh-cn
輕松一下,關于Emacs的一則玩笑
《Emacs 的日子是這個樣子的》:
- 聽說有 Emacs 這個東西。試了一下,感覺就像記事本一樣。沒什么學習曲線。就是……咋也找不到退出的辦法……
- 開始會一些 Emacs 了,開始學習各種 mode,按鍵綁定,配置方法,開始熟悉 Emacs……
- 比較熟悉 Emacs了,基本使用 Emacs干活,每天“活在” Emacs 里面……
- 非常熟悉自己“常用”的 Emacs,可以教別人 Emacs,大量泡 Emacs社區,大量下載、使用和跟蹤別人的擴展,已經離不了 Emacs……
- 漸漸不滿 Emacs,漸漸熟悉 Lisp 語言,開始改寫“自己”的Emacs,在這期間,又開始四處碰壁,工作效率總是被一個失敗的修改所影響……
- 經常修改 Emacs,自己手中的 Emacs基本上每周都和上一周有那么一點不太一樣…… 就是,改的太多了,經常在某天整理代碼的時候突然發現……原來還有這么個易用的功能…… 忘記好久了……
- …… ……
Emacs三個平臺的安裝與配置
1. Windows下安裝Emacs
請到以下鏈接下載Windows版的Emacs:
https://ftp.gnu.org/gnu/emacs/windows/
請大家下載列表中最新版本的zip文件,比如目前最新版的是2016年9月18日發布的25.1版:
emacs-25.1-x86_64-w64-mingw32.zip
下載后,用Winrar或7-zip等解壓,會出來一個文件夾 emacs-25.1-x86_64-w64-mingw32
內含四個子文件夾:
- bin
- libexec
- share
- var
打開bin文件夾,運行其中的 emacs.exe 文件即可開啟Emacs,不需要安裝:
你可以把emacs.exe這個文件鎖定到任務欄,就很方便了,按一下圖標就啟動了。
2. Linux下安裝Emacs
Debian一族(包括Ubuntu)下安裝Emacs:
sudo apt-get install emacs
Redhat一族(包括Fedora)下安裝Emacs:
sudo yum install emacs
其他的可以搜索如何安裝,或者下載Emacs的源代碼來編譯安裝。
下面演示Linux如何下載Emacs的代碼來編譯安裝(“逼格”最高的方式):
- 首先去
ftp://ftp.gnu.org/pub/gnu/emacs
上面有Emacs的幾乎所有版本的源代碼包,下載最新版的(用老版的也可以),如: emacs-25.1.tar.gz
解壓 emacs-25.1.tar.gz 并編譯,安裝,在終端(Terminal)中依次運行以下命令(如果是其他版本,則將如下命令中的25.1替換為相應版本即可):
tar -zxvf emacs-25.1.tar.gz #(解壓文件)
cd emacs-25.1 #(進入目錄)
./configure #(配置)
make #(編譯)
sudo make install #(安裝,會提示輸入你的用戶密碼)
- 安裝完之后要啟動Emacs很簡單,開一個終端(Terminal),輸入emacs,回車,就可以了。
不過小編嫌這樣太麻煩,可以用更簡單的方式來打開Emacs,我這里用一個鍵就可以了(演示環境是Fedora,不過其他系統如Ubuntu類似):
打開Fedora的“設置” (肯定知道設置在哪里吧)
選擇“鍵盤”
選擇列表中的“自定義快捷方式”,然后點擊加號“+”,用于添加新的快捷方式
選擇快捷方式的按鍵,小編這里選的是F2這個鍵,然后填寫命令,就是“emacs”,再填寫快捷方式的名稱,這個隨便填,我填的是“Emacs”,確定。
按F2鍵試試,是不是就啟動Emacs啦?這酸爽,不言而喻!
3. Mac OS下安裝Emacs
Mac下安裝Emacs,網上有不少文章,有用Git克隆下來Emacs的源碼然后編譯安裝的; 也有用一些包管理軟件來安裝的,但是小編推薦一個更方便的方式,和Mac下安裝QQ,迅雷那樣方便:
上這個網,然后下載那個dmg包,Mac用戶肯定懂的,就是Mac下安裝軟件的最常用方式。然后就沒有然后了... 如果這樣你都不會裝Emacs,那真心沒必要用Emacs了。
自動補全插件
安裝完Emacs之后,還需要安裝一個自動補全(可以自動補全關鍵字,文本等)的擴展,非常強大,名叫company-mode,官網:
http://company-mode.github.io/
幸好,這個擴展并不需要我們按照傳統的方式從官網下載、安裝到Emacs里面,因為Emacs里有個安裝擴展的列表,有點類似 Debian系列的 apt-get 和 Redhat系列的yum 這樣的包管理工具,所以我們只需要按步驟安裝:
按下 M-x 來調出命令輸入 (在Windows下就是Alt + x 鍵)
輸入 list-packages,回車
在出現的列表里,點擊 company
在右邊出現的新緩沖區里點擊 Install(英語“安裝”的意思)
- 點擊 Yes/是
開始感受自動補全的樂趣吧!
用此方法(list-packages命令)也可以安裝很多其他的Emacs的插件(擴展),大家也看到列表里有很多插件了吧,所以說Emacs都有點像一個小型的操作系統。
小編的Emacs配置文件
大家可以從網上下載一些大牛的Emacs配置文件,看一下他們的Emacs快捷鍵(除了基本的一些通用快捷鍵以外,用戶可以自定義很多快捷鍵,可以定義在 .emacs 文件中)。
如果你“不幸”選擇使用小編的Emacs配置文件,那么承蒙看得起(當然,你可以把我的配置文件作為參考,取其精華,去其糟粕(不過估計精華有點少,糟粕比較多...),“調配”出屬于你自己的Emacs配置):
下面講的是在Linux或Mac OS下的配置操作:
請用小編的 .emacs 文件替換你的家目錄的.emacs文件 (安裝完Emacs,你的家目錄,也就是 ~ 下就會有一個 .emacs 文件(默認是隱藏文件))。
把壓縮文件里的其他三個模塊文件放置到 .emacs.d 這個文件夾下的modules文件夾 (.emacs.d 文件夾是安裝完Emacs就會有的,也在家目錄里,不過modules文件夾需要你自己創建):
cd ~/.emacs.d/
mkdir modules
cp php-mode.el psvn.el saved-places modules/ #(或者手動直接把三個模塊文件復制到modules文件夾里)
我的Emacs配置和說明在Github上
https://github.com/frogoscar/emacs
其中配置文件的內容是:
https://github.com/frogoscar/emacs/blob/master/.emacs
三個模塊:
https://github.com/frogoscar/emacs/tree/master/modules
常用快捷方式
Emacs的快捷鍵都是綁定于Ctrl和Alt(或稱Meta, 在Mac下就是Cmd鍵)上的,例如C-x就是Ctrl+x,M-x就是Alt+x (在Mac下就是Cmd鍵)。當然所有的按鍵都可以自定義。
所以下面我在講述快捷鍵的組合表示方式時:
C 代表Ctrl鍵
M 代表Alt鍵(在蘋果的Mac OS系統下是Cmd鍵)
C-x C-c 代表著“先按C-x,再按C-c”
C-x k 代表著“先按C-x,松開手,再按k”
小編平時最常用的是這些快捷鍵組合
M-s : 新建一個buffer(緩沖區)
C-x O : 注意是大寫的O,不是零,所以需要按住shift鍵再按o鍵。用于在緩沖區之間切換
C-g : 取消當前操作
C-x u : 回到上一步,相當于Undo
C-x 3 : 把緩沖區(buffer)分為左右兩個,新的一個緩沖區是復制當前的緩沖區 (可以執行多次,來分割出很多小窗口)
C-x 2 : 把緩沖區(buffer)分為上下兩個,新的一個緩沖區是復制當前的緩沖區 (可以執行多次,來分割出很多小窗口)
M-w : 選中文字的情況是復制文字,而如果沒有選中文字則是復制當前的一行
C-w : 選中文字的情況是剪切文字,而如果沒有選中文字則是剪切當前的一行
M-x : 調出命令輸入,可以在后面接命令,比如man,svn-status,等
C-y : 黏貼
C-x C-s : 保存文本
C-x C-f : 打開文件,如果文件不存在,則新建文件
C-x C-v : 打開一個文件,取代當前緩沖區
C-x k : 關閉當前緩沖區(buffer)
C-s : 向前搜索
C-r : 向后搜索
C-x h : 全選
C-v : 向下翻頁
M-v : 向上翻頁
C-f : 前進一個字符
C-b : 后退一個字符
M-f : 前進一個單詞
M-b : 后退一個單詞
C-@ : 標記開始區域
C-a : 移到行首
C-e : 移到行尾
M-a : 移到句首
M-e : 移到句尾
M-< : 緩沖區頭部
M-> : 緩沖區尾部
M-g M-g,再輸入數字 : 跳轉到文本的第幾行
C-x 0 : 關閉當前緩沖區
C-x C-c : 退出Emacs
暫時只能記起來這么多啦,還有很多快捷鍵就要你自己去發掘啦!小編平時也不會所有的快捷鍵都用上,上述的快捷鍵組合是最常用的。
注意: 千萬不要死記這些快捷鍵組合,隨著你使用Emacs,很快就能記住的,相信我!
Emacs還有一個很大的好處就是幾乎所有的快捷鍵按鍵都在鍵盤的左下角,用左手就能單獨完成大部分操作,而右手則可以玩游戲(哦,不對,是操作鼠標),提高效率。
或者說,你用好了Emacs的快捷鍵組合,編輯代碼時甚至不需要鼠標,兩個手在鍵盤上就夠了!
還有一個平時常用的功能就是查詢函數,可以方便查詢已定義的函數:
按下 M-x 來調出命令輸入
輸入 man ,也就是Linux或Unix系統的man命令,是manuall的縮寫,也就是"手冊"的意思
然后輸入你要查詢的函數名,回車
嘗試一下Emacs吧,真的是“神器”!
誰用誰知道,用過都說好~
我是 謝恩銘,公眾號「程序員聯盟」(微信號:coderhub)運營者,慕課網精英講師 Oscar 老師,終生學習者。
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:「向著標桿直跑」