2011年1月11日星期二

為何 Emacs 和 Vim 被稱為兩大神器

Emacs 是神的編輯器,而 Vim 是編輯器之神。二者為何會有如此美譽,且聽本文向你一一道來。

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!同學,請冷靜下來,聽我說:它們的確夠老了, 都幾十年的壽命了,但你想想為什麼,為什麼這麼古老的編輯器, 卻有越來越多的人皈依它們。

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之間猶豫不定, 很難決定到底要皈依哪一個神。

http://linuxtoy.org/archives/why-emacs-vim-good.html

沒有留言:

發佈留言