1. 程式人生 > >Emacs vs vi:永無止境的聖戰(真的很好笑,很實在)

Emacs vs vi:永無止境的聖戰(真的很好笑,很實在)

原文標題 EMACS vs. vi :The endless geek 'holy war'
翻譯的不好,有些句子不知道如何譯的我就直接留的英文原文,大家見諒

EMACS vs. vi The endless geek 'holy war'

EMACS 對 vi:永無止境的聖戰

剛走沒多久,又開始了。我們linux版的版主表示這周的使用指南將要取消,這個指南是關於使用vi能夠完成的一些新的任務。

Greg Menke發出了第一個置頂帖。使用vi?那該多麼麻煩呀?他把自己的步驟貼了出來:
1.獲得一條任意品種的魚,長度大於12英寸就行
2.冰凍一晚上
3.把它放到電腦前,執行vi
4.抓住魚的尾巴不停的往你頭上砸,直到你決定用EMACS。因為魚鱗在你周圍飛濺並且你的頭開始痛

Menke,當然,他是在暗示,頑固的不僅是vi,vi的使用者更甚,他們頑固到拒絕承認他們虐待自己,就像拿冰凍的魚砸自己的頭一樣。

沒過多久,vi的擁護者們開始回擊,其中一個建議Menke把這一行加到他的步驟中去:在第1步之前鍵入emacs,這樣在第4步結束時emacs才可能載入完成。

他是在說EMACS編輯器慢嗎?

就 好像疲乏的軍隊在短期休戰中拒絕放棄戰爭一樣,vi和EMACS使用者在Linux,SAGE和其他計算機連線著的虛擬社團中冷戰不斷。幸運的時候,冷戰會 暫時消失幾個月。但是一旦一方流露出些微的輕視,戰火會重新燃遍整個新聞組和郵件列表。出於他們的社群文化,任何一個陣營中如果有人認為他們用的是世界上 最好的編輯器而使用其它編輯器(尤其是對立陣營)的人都是傻瓜,那麼給予他足夠的嘲諷,他會意識到自己是錯的。

現在,關於Unix上哪款編輯器才是上帝的傑作的分歧並沒有嚴重到給世界帶來麻煩,像可口對百事是一場沒有結果的戰爭,僅僅是小範圍內的激進分子們在高呼“加油!”。

“就 我所知,EMACS和vi的人口比例大致是50/50,”作為一個長期在開源和黑客社群中扮演各種角色的人類學家,Eric Raymond在郵件中這樣說道,“Pico,joe,MicroEmacs以及其他編輯器,在整個時期的統計上來看,已經消亡了。” Raymond can personally date the vi/EMACS split back to 1985 and stipulates that, in all likelihood, it went on long before that.

早在1991年,Raymond就在Jargon File(http://www.tuxedo.org/jargon/ )中記錄了vi和EMACS之間的聖戰,perhaps the ultimate collection of hacker terminology.

當被問起時,許多對兩者都熟悉的人會說它們的區別在速度和功能性,vi的使用者指出他們能快速的在文件中移動和修改,而EMACS的擁護者則吹噓他們無窮的定製性。Vi使用者嘲弄EMACS有太多不必要的裝飾;EMACS使用者則嘲弄vi難於入門而且功能有限。

所以,最好的編輯器之爭在技術上等價於"tastes great/less filling?",是的,有幾分。不過,所有的宗教或者戰爭給我們的教訓是:你挖的越深,流出來的越黑。

當然,爭論也不是完全沒有意義的,我們的電腦世界就是由這些編輯器從最初的一無所有而建立起來的。這些對終端使用者透明的編輯器,有著如此忠誠的擁護者,無非也是體現了人們想用最理想的方式來做事的樸素願望。

Vi: 被時光遺忘的編輯器?

第一眼看上去,從外表上,vi就是那種被遺忘的。它不是那種你一開啟終端就要用的東西(對這種想法,你最好去用EMACS)。即使是VIM,這個vi使用者最近使用的新版本,也會讓人驚訝(或者說被挫敗)於不知道如何下手。

即使是VI Lovers的站長也承認,學習曲線太陡峭了。“Vi 在你知道25個以上命令之前不會讓你變快,”阿姆斯特丹本地人Thomer Gil這樣寫道,他現在任職於麻省理工學院計算機系。

Gil因為使用VIM,被他的同事們比作“野人揮舞著斧和棍”。

在vi 的所有的“缺點”中,最顯著的一點是僅僅想往螢幕上隨便輸入一點什麼該如何開始。Vi有兩個模式:其一是插入模式,這時你可以鍵入文字,你可以敲 insert鍵進入這個模式。還有一個是命令模式,這個模式下你不能鍵入文字,只能輸入命令,你可以從插入模式敲esc鍵進入命令模式。

想象一下使用者第一次使用vi,意外地敲了esc鍵,除了發現他不能再輸入文字外,還發現程式隨著他的擊鍵做出各種古怪的舉動。

Jargon File 中冷冷地指出vi的這個特性“無休止的困惑著新手,因為它要麼在想輸入文字時當成命令,要麼相反,而且預設情況下不提示使用者當前處在哪一個模式。”
“多模式讓人們覺得怪誕。”Gil承認。

Vi 由Bill Joy於1976年寫成,融合了兩種更原始的編輯工具:ed和ex。Vi代表著“visual interface,”which in 1976 was in quite the bleeding edge in computing, according to a Joy interview in Linux Magazine。

“我嘗試使它能通過300波特率的調變解調器使用,這也是為什麼存在這麼些古怪命令的原因了。它恰好能通過調變解調器使用,而且是全屏的,”Joy說“所以這款編輯器被優化成當螢幕顯示極慢時也能用。”

在那次採訪中,Joy對比了EMACS的開發環境,認為EMACS是專為光纖連線的系統和巨大的PDP-10而設計的。

“所以他們可以有許多有趣的命令,如螢幕上閃著微光等等,而此時,我坐在伯克利州二戰遺留下來的屋子裡,利用調變解調器和終端,這些僅僅只夠游標從螢幕底部消失,”Joy說,也許聽起來有一點嫉妒。“人們並不知道vi被設計用於一個再也不存在的世界。”

然而,在80年代早期網路與處理器飛速發展的時候,這個vi理應消失的時代,vi卻空前繁榮起來。VI Pages列出了近30種vi的克隆體,從elvis和VIM到很少聽過的如WinVi和vigor。

Tim O'Reilly,O'Reilly 出版公司的策劃在公司的Ask Tim欄目表明公司賣出了兩倍於EMACS的vi的圖書。更甚,任何時候O'Reilly在一些大會上發起的vi 對 EMACS 的彩彈球遊戲中,vi總是有兩倍於EMACS的志願者數目。

他們追求的是什麼呢? John Arundel恰如其分的描述:“觀看一個vi高手對檔案做複雜編輯時,當他手指在鍵盤上飛舞,文字像刷屏一般,你會認為他具有超人的力量。”

Gil在他的網站上釋出了這種技巧的一些例子。“vi的關鍵在於組合特定的動作(刪除、複製到緩衝區、變成大寫等等)和移動(到第25行,到文件末、到下一處foo,到這一行的第二個x,等等)。”

“Huh?”我發郵件給他。

Gil發回了一個例子:“如果,舉例來說,一個文件包含了這樣一行:'a b c d e f g' 游標在b處,這時我可以鍵入'd/f'。”

第一個d表示刪除,/ 表示搜尋,所以這個命令表示從b刪除到f。

“使用這些沒什麼特殊要求...刪除單詞、句子,回到先前的地方,Oh,不,再跳回去,撤銷我剛做的,重做一次,”Gil 這樣寫道。

Gil 保證你在EMACS中也能做同樣的事,然後,它需要記憶笨拙“Ctrl-X Ctrl-c Alt-F4 的鍵組合”。

Gil展示的另一個竅門是VI使用者如何在檔案中移動。“笨拙的方式是使用箭頭鍵;這有許多其他方式,更高階的方式來移動。”Gil寫道。vi提供的高階方式包括跳轉到上一次或上幾次游標所在處,跳轉到特定單詞的下一處,跳轉到下一個句子或章節。

即使雙模式的特性對使用者來說變得透明。大約一年前,我和Jon Lasser一起探討他最近出版的一本書--Think Unix。(他告訴我這本書的手稿是完全用vi寫成的)。最後我們談起vi,我開始抱怨vi的兩種模式。

Lasser解釋說他沒看出使用vi和使用字處理器如StarOffice或者Microsoft Word有什麼不一樣的地方。總的來說,當你把手移動到螢幕區以外,你就無法輸入文字。你實際上就是從插入模式轉到了命令模式。“它們完全是一樣的東西。”他這麼解釋。

就像O'Reilly所寫的那樣:“像UNIX上的許多東西一樣,它僅僅是看上去很難。”

EMACS極盡奢華?

當vi最忠誠的O'Reilly在Ask Tim中寫道他最初從EMACS轉到vi僅僅因為他的EMACS配置檔案損壞了。這是vi使用者針對EMACS的無數攻擊之一。

EMACS和vi質樸而有限的命令形成鮮明的對比,因為它幾乎有著無限的自定義性。人們讓它是什麼它就是什麼,然而這種力量對使用者而言不見得就是最好的。

像Emacs-Beginner-HOWTO上所說的,EMACS可以是一個文字編輯器,郵件客戶端,新聞閱讀器,字處理器,指令碼編輯器以及程式語言的整合開發環境。

能做到這個的關鍵在與EMACS提供的多模式,每個模式有唯一的命令集。想要檢視郵件?進入郵件模式就好了。想要寫C++程式,用C++模式吧。要創作Web頁?html-helper模式正好合適。

掌握所有這些之後,你也可以自定義EMACS甚至是新增新的功能,通常這都是通過修改Lisp程式碼來完成的。

vi使用者認為EMACS的專橫跋扈之處在於,它本該是一個單純的文字編輯器,不應該為得到使用者而什麼都做。一個正在流行的笑話是EMACS是一個捆綁了文字編輯器的作業系統。

“EMACS實際上在剛開始是一個標準的工程,”Guy Steele在郵件中說。他是EMACS最初的作者之一,另一個作者是Richard Stallman,後來建立了自由軟體基金會的那位。

據Steele 回憶,Stallman當時維護著一個PDP-10上早期的編輯器——TECO,意思是“Text Editor and COrrector”。儘管固定的擊鍵會執行編輯命令,Stallman創造了一種使用者可程式設計的表格“這樣每一個擊鍵所對應的動作都在表格中查詢得知,” 按照Steele的說法。“一個選擇是執行使用者指定的TECO巨集。”

使用這種巨集功能,使用者把自己的一套巨集通過程式設計繫結到各種擊鍵序列上去,但是這樣當程式設計師們在一些程式上合作時就存在問題了,因為他們發現他們之間很少有共同的擊鍵序列。

“因為文字(程式)編輯的技巧,使用者間的交流開始支離破碎,”Steele寫道。所以Steele連同David Moon和Stallman一起,開始了一個整合所有的想法到一個統一的命令集的工程。

“我在紙上做了一個原型,仔細揣摩了那些各種各樣巨集包的作者和使用者,”Steele在郵件中說。

“我記得很清楚,”Dan Weinerb回憶說。他是EMACS的alpha版測試者之一。“這傢伙在他的剪貼簿上展示全部的鍵繫結,這是他仔細的從每個人那裡收集在一起的統一的、標準的鍵繫結。”

幾個月之後,Steele忙著完成他的博士論文,工作交給了Stallman。And the rest is history。

從一開始加入的靈活性給予了EMACS優勢,鐵桿使用者這樣說。

“我 覺得EMACS就像是編輯器中的瑞士軍刀,”Debra Cameron在郵件中說,他是Learning GNU Emacs的合著者之一,Cameron Consulting的老闆。“它是一個完備的工作環境,一個微觀世界。如果你想讓它做些什麼,很可能你會發現(在一番尋找後)它已經做到了。如果還沒 有,你可以自己擴充套件它來做到你想做的。”

我們就不能和平相處嗎?

該怎麼比較EMACS和vi呢?

“我見過許多熟練的vi使用者展示了一些漂亮的技巧,但是我仍然認為vi只是一個編輯器,儘管出於某些原因它是一款出色的編輯器,”Cameron在郵件中說。“[它]總是,總是用相同的方式工作。從這方面說,它像麥當勞;不管你去哪一家,總是很精確的保持一致。”

“你想要一款編輯器它能被任意修改來滿足你的需要和怪癖同時還能做很多很多事,或者你僅僅只是想很快的在任何機器上編輯檔案?”她這樣問。“對於那些總要從一臺機器上移到另一臺的人們,這種一致性確實是一個優勢。”

換句話說,EMACS等於靈活性,而vi等於一致性。

這就是事情變得黑暗的地方。

“EMACS當然比vi要複雜的多,但是我不相信它在任何有用的地方能做的更強,但是vi是設計為UNIX系統的一部分並且能和其他系統相互協作,”Jon Lasser反駁。

請 注意,對Lasser來說,“有用”的意思是指vi允許你從其他程序通過UNIX管道讀取文件,“就像使用其他UNIX程式一樣”他解釋。所以,這個神祕 的擊鍵序列“<esc> :r !ls<enter>”在vi中輸入之後(注意,在命令模式)把“ls”的輸出——當前目錄的檔案列表——讀入到vi的緩衝區。其他UNIX 程式的管道也會同樣的工作。

為了在vi中自動編輯大量檔案,Lasser說這就是為什麼我們有“sed,awk,以及其他UNIX文字處理工具。

“文字處理是UNIX設計的一部分,而vi設計為這個系統的一部分,”Lasser寫道。

也許EMACS和vi的核心問題完全不是一致性對靈活性。畢竟,所有的編輯器都提供靈活性,vi也是,它通過UNIX自身,然而EMACS的靈活性是構築於系統層次之上的。

而 且,基於這樣的事實——靈活性的唯一要點在於使工作變得快些。如果你想要直接而無裝飾的文字處理,你可以選擇Pico,它僅僅提供一個空白的螢幕,而且不 會有任何使新手混亂的特性,而像vi或EMACS都會。但是vi和EMACS兩者的共同點都在於提供一些高階的方式,來減少鍵盤上的手指速度和程式設計者大腦 速度的差異。

換句話說,是否這些編輯器提供著相同的東西,但是要求使用者用不同的方式思考呢?Vi需要耐性去學習它古怪的操作方式,然後一旦 你精通它們,你在任何UNIX系統上都獲得了行動自由。EMACS賦予你瘋狂的自由來自定義你認為合適的裝備,然後如果你不小心,你會變成你自己配置的囚 徒。

在所有優秀的程式設計師在提升自身效率的旅途上,偶爾,vi和EMACS使用者在路口上相遇,他們本來自不同的方向。他們一相遇,通常就彼此扔石頭砸對方。

這些都很好。

“我 不認為在功能上有很大的差異。這兩個編輯器都能把事情做得很好,and it just comes down to what people learn first,”Gil寫道。“一旦大多數人會EMACS,他們將教其他人EMACS。從而,大多數人使用EMACS,等等。”

然後爭執又將繼續……

相關推薦

Emacs vs vi永無止境聖戰(真的好笑實在)

原文標題 EMACS vs. vi :The endless geek 'holy war' 翻譯的不好,有些句子不知道如何譯的我就直接留的英文原文,大家見諒 EMACS vs. vi The endless geek 'holy war' EMACS 對 vi:永無止境的聖戰 剛走沒多久,又開始了。我們l

分布式架構的演進分析的詳細到位

解決 配置管理 基本 關系型 class mysq 不能 lamp nosql 作者:李小翀鏈接:https://www.zhihu.com/question/22764869/answer/31277656來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載

第一次使用Git上傳本地專案到github上下載、安裝、上傳(詳細全面)

我覺得學習github的人基本上已經快要脫離了小白的標籤,雖然我一直喜歡自稱為小白。對於程式設計師原來說應該都聽說過GitHub,GitHub有許多開源的的專案和一些前沿的技術。因為自己在第一次使用過Git和github時遇到過不少的坑,所以,想對第一次使用Gi

Matlab繪圖-詳細全面

Matlab繪圖 強大的繪圖功能是Matlab的特點之一,Matlab提供了一系列的繪圖函式,使用者不需要過多的考慮繪圖的細節,只需要給出一些基本引數就能得到所需圖形,這類函式稱為高層繪圖函式。此外,Matlab還提供了直接對圖形控制代碼進行操作的低層繪圖操作。這類操作將圖

volatile離我們親切不該陌生

synchronized程式碼塊兒裡面的變數都實現了記憶體可見性。記憶體可見性的底層是CPU的指令實現的。volatile修飾的是變數,它的作用也是實現記憶體可見性,底層用的用的同一個CPU指令。可以這樣理解:synchronized裡面的變數都是volatile修飾的。   我們

activity跳轉的過渡效果漂亮

注意,切換方法overridePendingTransition只能在startActivity和finish方法之後呼叫。第一個引數為第一個Activity離開時的動畫,第二引數為所進入的Activity的動畫效果淡入淡出效果overridePendingTransiti

QT中PRO檔案寫法的詳細介紹有用重要!

在QT中,有一個工具qmake可以生成一個makefile檔案,它是由.pro檔案生成而來的,.pro檔案的寫法如下: 1. 註釋 從“#”開始,到這一行結束。 2.模板變數告訴qmake為這個應用程式生成哪種makefile。下面是可供使用的選擇: TEMPLATE = app

溫暖

1. 她很胖,胖到所有人都覺得不會有人娶她。他很瘦,卻鬼使神差般娶了她。結婚那夜,她在他面前寬衣,隨著衣服脫落的,還有一層肉皮。其實她是個美人,只因厭 倦人們對外貌的嚴苛,於是費盡心機想找個能容忍她醜陋的人託付終身。他得知真相之後憤然離去,他不過是想娶個外貌醜陋且沒有心機的

一個實用學習android xml佈局檔案

用了各種佈局組合成一個漂亮的見面。新手很實用的一個例子,大家學習一下。。。。。。分享 本例用到了(相對佈局,線性佈局的各種巢狀使用) 效果圖片: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

Vue 讀取本地靜態檔案 json【詳細】

文章轉自原創部落格    http://www.xdx97.com/#/single?bid=c4fadbb8-93e3-3129-10eb-a7216f4a99b4   目的:使用vue讀取本地的靜態檔案。   方法一:require

PowerDesigner 使用教程(具體實用)

PowerDesigner簡介   PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地對管理資訊系統進行分析設計,它幾乎包括了資料庫模型設計的全過程。利用PowerDesigner可以製作資料流程圖、概念資料模型、物理資料模型,可以生成多種客戶端開發工具的應用程式,還可為資料倉

Drupal 7 資料庫 操作(犀利)

Drupal 7 使用 PDO 連線資料庫,鑑於 PHP 6將把 PDO 做為預設資料庫連線方式,這是必須的選擇。實際上,Drupal 7之前的資料庫抽象層,和 PDO 的某些理念一致,用相同的方法操作不同型別的資料庫,減少了模組開發者的工作,也提升了程式的相容性和可移植

遺傳演算法詳解(GA)(個人覺得形象適合初學者)

本文是去年課題組週報中的一個專題講解,詳細講了GA,由於是週報,所以十分詳細。很適合初學者入門。文中也簡單提及了模擬退火演算法。文章綜合參考了一些網際網路資料。發部落格以備忘! 三:遺傳演算法         照例先給出科學定義:        遺傳演算法(Genetic

Matlab繪圖-詳細全面(包含各種標示符的輸入方法)

Matlab繪圖 強大的繪圖功能是Matlab的特點之一,Matlab提供了一系列的繪圖函式,使用者不需要過多的考慮繪圖的細節,只需要給出一些基本引數就能得到所需圖形,這類函式稱為高層繪圖函式。此外,Matlab還提供了直接對圖形控制代碼進行操作的低層繪圖操作。這類操作將圖形的每個圖形元素(如座標軸、曲線、

分散式架構的演進分析的詳細到位

初始階段 的小型系統 應用程式、資料庫、檔案等所有的資源都在一臺伺服器上通俗稱為LAMP 特徵: 應用程式、資料庫、檔案等所有的資源都在一臺伺服器上。 描述: 通常伺服器作業系統使用linux,應用程式使用PHP開發,然後部署在Apache上,資料庫使用Mysql,彙集各種免費開源軟體以及一臺廉價伺服器就

vs. 種姓新一代印度人的婚戀觀

reason 這也 lds con internet 詞匯 vat net expressed 今日導讀 “自由戀愛”是所有世界上所有有情人共同的心願,而在印度,因為其根深蒂固的種姓制度,仍然有大批情侶只能聽從父母的“包辦婚姻”,被迫與心愛的人分離。但是最新的一項調查表明,

人工智能VS投資者股票市場上誰的勝算更高?

人工智能 華爾街 股票市場 異想天開 股票投資 人工智能研究歷史淵源,當人工智能與資本投資,尤其是股票投資相結合或許聽起來有些異想天開,但正如科幻作家William Gibson所言:“未來已經到來,只是分布不均。”在股票市場上想獲得高於平均水平的回報是非常困難的,事實上,研究顯示即使在華

《大型網站技術架構》讀書筆記之六永無止境之網站的伸縮性架構

映射 應對 方法 訂閱 知識 位置 n+1 轉換 bsp 此篇已收錄至《大型網站技術架構》讀書筆記系列目錄貼,點擊訪問該目錄可獲取更多內容。 首先,所謂網站的伸縮性,指不需要改變網站的軟硬件設計,僅僅通過改變部署的服務器數量就可以擴大或者縮小網站的服務處理能力。在整個互聯

Emacs學習筆記移動

size exp http spc ssi 參考 put kill ati 參考網址:https://www.emacswiki.org/emacs/NavigatingParentheses Navigating over balanced expressions C

Kotlin VS Java基本語法差異(轉載)

允許 接收 point this view 學習 替換 同時 ons 5月18號,goole宣布Kotlin成為官方支持的開發語言以來,Kotlin語言社區,公眾號,qq群等全面轟炸,本文是一篇譯文,來自國外的一個用戶,將給大家介紹,基礎語法部分Kotlin和java之間的