1. 程式人生 > >Emacs,最強編輯器,沒有之一

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種思想依次是:

  1. 條件結構(即"if-then-else"結構)。現在大家都覺得這是理所當然的,但是Fortran I就沒有這個結構,它只有基於底層機器指令的goto結構。

  2. 函式也是一種資料型別。在Lisp語言中,函式與整數或字串一樣,也屬於資料型別的一種。它有自己的字面表示形式(literal representation),能夠儲存在變數中,也能當作引數傳遞。一種資料型別應該有的功能,它都有。

  3. 遞迴。Lisp是第一種支援遞迴函式的高階語言。

  4. 變數的動態型別。在Lisp語言中,所有變數實際上都是指標,所指向的值有型別之分,而變數本身沒有。複製變數就相當於複製指標,而不是複製它們指向的資料。

  5. 垃圾回收機制

  6. 程式由表示式(expression)組成。Lisp程式是一些表示式區塊的集合,每個表示式都返回一個值。這與Fortran和大多數後來的語言都截然不同,它們的程式由表示式和語句(statement)組成。

  7. 符號(symbol)型別。符號實際上是一種指標,指向儲存在雜湊表中的字串。所以,比較兩個符號是否相等,只要看它們的指標是否一樣就行了,不用逐個字元地比較。

  8. 程式碼使用符號和常量組成的樹形表示法(notation)

  9. 無論什麼時候,整個語言都是可用的。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 的日子是這個樣子的》:

  1. 聽說有 Emacs 這個東西。試了一下,感覺就像記事本一樣。沒什麼學習曲線。就是……咋也找不到退出的辦法……
  2. 開始會一些 Emacs 了,開始學習各種 mode,按鍵繫結,配置方法,開始熟悉 Emacs……
  3. 比較熟悉 Emacs了,基本使用 Emacs幹活,每天“活在” Emacs 裡面……
  4. 非常熟悉自己“常用”的 Emacs,可以教別人 Emacs,大量泡 Emacs社群,大量下載、使用和跟蹤別人的擴充套件,已經離不了 Emacs……
  5. 漸漸不滿 Emacs,漸漸熟悉 Lisp 語言,開始改寫“自己”的Emacs,在這期間,又開始四處碰壁,工作效率總是被一個失敗的修改所影響……
  6. 經常修改 Emacs,自己手中的 Emacs基本上每週都和上一週有那麼一點不太一樣…… 就是,改的太多了,經常在某天整理程式碼的時候突然發現……原來還有這麼個易用的功能…… 忘記好久了……
  7. …… ……

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,迅雷那樣方便:

http://emacsformacosx.com/

上這個網,然後下載那個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吧,真的是“神器”!
誰用誰知道,用過都說好~

轉載自:https://www.jianshu.com/p/732157b02ecc