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 : 後退一個單詞
[email protected] : 標記開始區域
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吧,真的是“神器”!
誰用誰知道,用過都說好~