編輯器之王:Emacs 和 Vim

Emacs 是神的編輯器,而 Vim 是編輯器之神。兩者爲什麼會有如此美譽,且聽本文向你一一道來。html

Author: Jiqing Wu
email: jiqingwu@gmail.com
homepage: http:://hi.baidu.com/jiqing0925
create: 2011-01-09
update: 2011-01-09
面向的讀者: 常常用電腦處理文本和編程的同窗

0. 序章:神器的傳說

在這個蔚藍色的星球上,流傳着兩大神器的傳說: 聽說Emacs是神的編輯器,而Vim是編輯器之神。程序員

追求獨步天下的高手和低手們爭着一睹它們的風采, 可看到它們樸素單薄的界面後,不由心下懷疑: 這就是神器嗎?甚至有人生了輕視之心。編程

膚淺的人嗤之以鼻,說:什麼年代了,還抱着這麼老土的玩意不放, 真他媽Geek!同窗,請冷靜下來,聽我說:它們的確夠老了, 都幾十年的壽命了,但你想一想爲何,爲何這麼古老的編輯器, 卻有愈來愈多的人皈依它們。vim

Windows下用UltraEdit和Editplus的人質問: 它們到底比UltraEdit和Editplus好在哪裏?我說: 不可同日而語。編程語言

連UltraEdit和EditPlus都沒用過的同窗問:它們就至關於Linux上的 Notepad吧?我說:請你從個人眼前消失。編輯器

一些人勇敢地拾起了Vim或Emacs,卻發現學習曲線陡峭而漫長, 因而在沒發現它們的強大以前就放棄了,說: 太難用了,把鍵盤當鼠標用的爛玩意,有什麼好的?函數

仍是有一些人留下來了,堅決地守護着這兩大神器。 一些說葡萄太酸的人想離開又不甘心,老是問: 它們到底神在哪裏啊? 我不由想起了李宗盛的幾句歌詞::工具

有人問我你到底是哪裏好,
這麼多年我還忘不掉?
春風再美也比不上你的笑,
沒見過你的人不會明瞭。

也許你不會明瞭,我仍是要努力講一講。學習

1. 無敵的可擴展性

1.1 可擴展性給了軟件強大的生命

曾幾什麼時候,Windows用戶對軟件的可擴展性沒有概念, 他們只能對他們使用的軟件進行很是有限的定製。 擴展軟件的權利保留在軟件開發者手中。軟件的使用者 若是想要新的功能和特性,只能等待軟件的升級。 有能力的用戶等不及了,爲了添加本身想要的功能, 從0開始寫了一款新的軟件。 就這樣,新的功能意味着新的軟件,Windows下的軟件 前赴後繼,迅速地更新換代着。所以, Windows下的軟件都很短命。

Linux和開源軟件漸漸流行起來,人們才發現: 可擴展性才能給軟件強大的生命。 在MS的VS橫行的今天,Eclipse爲何被評爲最好的IDE? 就是由於它在IDE中最具可擴展性。 在IE幾乎一統天下的時候,爲何Firefox能奪走愈來愈多的用戶, 也是由於它的可擴展性。 提供了良好的擴展接口,用戶天然會寫出各類各樣的插件, 來知足用戶本身形形色色的要求。 這樣,軟件在用戶的推進下天然變得強大了。

Emacs和Vim沒有被時代淘汰,反而愈加強大, 也正是由於在數不清的編輯器中,他們具備無可匹敵的可擴展性。

1.2 Emacs是假裝成編輯器的操做系統

有句誇張的話說:Emacs是假裝成編輯器的操做系統。 細細想來,這句話並不誇張。

Emacs實際上是個Lisp的解釋器,所以能夠用Lisp靈活地擴展。 Lisp是什麼東西,這一樣是種頗有生命力的編程語言。 在C語言尚未發明的年代,MIT的人工智能實驗室寫ITS操做系統時, 一部分用的是彙編語言,還有一部分就是用的Lisp。 如今,Lisp仍在人工智能研究領域普遍使用着。

有這麼牛逼的擴展語言,註定Emacs向着無所不能的方向發展。 漸漸地,人們用Emacs再也不限於寫程序,寫文檔, 並且在Emacs裏管理文件系統,運行終端,收郵件,上網, 聽音樂……,真是一發不可收拾。甚至,有人用Emacs控制咖啡機煮咖啡。

這種大而全的擴展,背離了「一個程序只作一件事並作好它」的 Unix哲學,被Unix的忠誠用戶所詬病。但是真的背離了嗎? Emacs說過本身是一個編輯器嗎?

正是由於Emacs的無敵的可擴展性,人們才分不清Emacs究竟是不是一個編 輯器了。但,就是有人喜歡這種All-in-One的哲學,喜歡在Emacs中完成每 件事。因此纔會有人寫《生活在Emacs中》,因此, Emacs纔會成爲一種信仰。

1.3 Vim不僅是Vi

Vim是Vi最受歡迎的變種之一,除了繼承了Vi迅捷的編輯方式, Vim的功能已經比原始的Vi強大得多。 這也得益於它能夠用Vim腳本無限地擴展。 Vim.org 上已經有數千個腳本了,給Vim增長各類各樣的特性和功能。

爲了證實Vim的可擴展性不輸於Emacs,也有用戶寫了 在Vim中玩遊戲、運行Shell、和集成GDB在Vim內部調試的插件。 客觀地講,Vim的腳本語言與Emacs的ELisp相比,略顯遜色, 但這絲絕不妨礙它把Vim擴展成很是優秀的編輯器。

說到底,Vim的前身Vi和Emacs的設計採用了不一樣的哲學, Vi更符合Unix傳統,它經過管道機制和系統內各類積木工具打交道, 它講究的是和系統內的工具程序協做來完成用戶的任務。 和Emacs相比,它的定位很明確,就是要作一個強大的編輯器。 所以Vim的絕大部分擴展,都是爲了更好地完成編輯文本的任務。

海納百川,有容乃大。Emacs和Vim經過別的編輯器沒法比肩的可擴展性, 不斷吸取廣大用戶的智慧,是它們能成爲「神器」的緣由之一。

2. 特立獨行的魅力

2.1 可擴展性讓你傾注了靈魂

一旦你意識到Vim或Emacs的強大,你就踏上了不停發掘它們潛力的漫漫長 路。你不停地改進本身的配置文件,你不停地搜索更好的插件,甚至有一 天你開始動手寫本身的插件。就像劍客保養本身的劍同樣,你也甘心花時 間提高你的Vim或Emacs。經年累月,不知不覺,你已經在那把劍上傾注了 你的靈魂。

2.2 獨特的操做方式讓你中了毒

Emacs和Vim有着迥異的操做方式,卻成了Unix/Linux世界中兩種表明性的 操做方式,有些軟件的操做方式相似Vi,而有些軟件的方式相似Emacs, 甚至有些軟件提供了Vi的鍵綁定和Emacs的鍵綁定讓你選擇。 而不管哪一種操做方式,對Windows用戶來講都是古怪的。 雖然說古怪,多少代人也驗證了這兩種操做方式的高效。

Emacs號稱Ctrl到死的編輯器。其實它幾乎用了全部的輔助鍵, 據說過沒有,Emacs = Esc + Meta + Alt + Ctrl + Shift。 因此高德納大師說操做Emacs,就像彈奏管風琴。 Emacs使用很是多的組合按鍵,這大概也是它高效於其它無模式編輯器的原 因之一。你也能夠定義本身的組合鍵序列,調用本身寫的lisp函數, 完成本身想要的功能。

Vi一貫是以快速的文本編輯聞名於世的。它的按鍵更簡潔,一般是單個字 符按鍵,就實現某種操做。但這是以有模式爲代價的。你要不停地按Esc在 從它的插入模式返回Normal模式。客觀得講,在文本編輯方面, Vim比Emacs高效,由於它提供了一些Emacs沒有對應功能的操做來輔助高效 的文本編輯。但它的模式切換也讓一些人受不了,因而那些人選擇了 Emacs。

無論你選擇了Vim仍是Emacs,你都要爲習慣它們獨特的操做方式而努力, 這是一個技藝積累的過程。當你習慣了Vim或Emacs,你會有欲罷不能的感 覺,你但願用它們完成儘量多的任務, 由於你再用別的編輯器也已經不習慣。

用Vim或Emacs就像吸食毒品,慢慢地就會上癮。 它們會帶給你漸漸強烈的快感,但你也向它們獻出了本身的靈魂。 這時,你只能稱它們爲神器。

3. 黑客的編輯器

Vim的前身Vi的做者Bill Joy和Emacs的做者Richard Stallman 都是那個時代著名的黑客,因此這兩款編輯器一開始面向的主要用戶 就是寫程序的人,如今仍然是。 它們對編程加入了愈來愈多的支持,如語法高亮、智能縮進、關鍵字補全 甚至集成調試。也有愈來愈多的程序員從IDE轉向了Vim和Emacs。

用Vim和Emacs編程到底有什麼好處? 我想首先是它們高效的編輯操做會提升你的編程效率。 其次你能夠用它們完成各類語言的編程,所謂一劍在手,夫復何求。 你不用再由於編程語言不一樣去學習不一樣的IDE的使用, 那些龐大的IDE的升級換代也與你再不相關, 你把精力用於學習編程語言自己就行了。 據說Google和微軟內部開發也都不用IDE的, 他們也會用Emacs或Vim。

由於我寫的程序很少,還不能深刻體會用Vim或Emacs開發程序的樂趣。 我只是以爲這很酷,你看,Linux之父Linus多年來用的是一款 MicroEmacs,它比GNU Emacs或XEmacs少量多功能,但Linus就是用它在維 護Linux。 微軟的大牛Don Box,Com之父,一直用Emacs, 他說誰也不能奪走他的編輯器。他還在網上放了一段他用Emacs寫C#程序的 視頻。

編程大師們的選擇,也是Emacs和Vim被追捧爲神器的緣由之一。

4. 神器引起的聖戰

Vim用戶和Emacs用戶有着旗鼓至關的品位,應該互相欣賞纔對。 現實倒是,忠誠於Vim的用戶和忠誠於Emacs的用戶互不相容, 經常沒完沒了地打口水仗。Emacs用戶說Vim的操做方式單一而古怪, Vim用戶說Emacs體積龐大,啓動緩慢。

頗有點一山不容二虎的意思,大概由於兩者都處於神器的高度,纔會鬥爭 不斷吧。也多是由於兩者大相徑庭的設計哲學吸引的用戶在價值觀上也 互不認同。

正由於二者難分高下,新人老是在Vim和Emacs之間舉棋不定, 很難決定到底要皈依哪個神。

相關文章
相關標籤/搜索