為什么這些死腦筋們?cè)谟?VI?
不管你們信不信,現(xiàn)在有很多人迷戀這個(gè)30多年歷史的VI編輯器(最好的克隆和改進(jìn)版本VIM也已經(jīng)有15歲了).
他們不是守舊派,跟不上時(shí)代潮流——VI用戶(hù)的社區(qū)正在不斷增長(zhǎng)著,我自己用VI已經(jīng)2年了(在有了10年編程經(jīng)驗(yàn)之后),我的很多朋友也都開(kāi)始使用VI了,有趣的是,有很VI用戶(hù)在VI出現(xiàn)前還沒(méi)有出生。
當(dāng)然,VI/VIM編輯模式比其它任何編輯囂都出眾肯定有原因的,你不必非得是Unix高手才能用它,相反,VIM可以免費(fèi)在任何平臺(tái)下使用,并且它也可以作為其它主流IDE的插件使用,現(xiàn)在讓我來(lái)澄清幾個(gè)誤解,并用一些真實(shí)例子說(shuō)明為什么它是極好的編輯器。
誤解#1:模態(tài)編輯
你第一次被VI/VIM難住,可能是對(duì)必須先用”i”才能開(kāi)始編輯感覺(jué)震驚和厭惡,記不住使用”hjkl”來(lái)移動(dòng)光標(biāo)方向,并且需要按”a”才能在光標(biāo)后面追加內(nèi)容.因?yàn)槟憧赡芤呀?jīng)習(xí)慣使用其它編輯囂,并且方向鍵在插入模式管用(90%情況下是這樣的,如果系統(tǒng)配置正確的話(huà)),你可能除特別需要,保持在插入模式而不會(huì)返回到正常模式. 你可能會(huì)花20分鐘在插入模式下,并且會(huì)抱怨:”我到底可怎么記住現(xiàn)在正在插入模式下還是正常模式下?”
很顯然,這是一個(gè)完全錯(cuò)誤的使用VI/VIM的方式,正確方式是,你不會(huì)在意模式,你會(huì)一直在正常模式下,只有當(dāng)需要插入或修改字符時(shí)才會(huì)進(jìn)入插入模式,編輯完成之后馬上按<Esc>返回到正常模式.因此,如何記住當(dāng)前模式問(wèn)題并不存在.當(dāng)你在編輯文字的時(shí)候,不要在插入模式去接聽(tīng)電話(huà),而應(yīng)該退出插入模式,接聽(tīng)電話(huà),或者返回的時(shí)候按<Esc>進(jìn)入正常模式.不要把插入模式當(dāng)成一種狀態(tài).
讓我來(lái)解釋下這其中的哲學(xué).
VI/VIM中的命令是可以組合使用的,比如”d”代表刪除,”e”代表”移到單詞末尾”,而”de”的功能就是刪除從當(dāng)前光標(biāo)位置至單詞結(jié)尾間的字符(有點(diǎn)像Ctrl-Shift-Right, Left, Del 快捷鍵在其它編輯器中實(shí)現(xiàn)的功能)
這樣的好處之一是,”.”命令可以重復(fù)上次執(zhí)行完成的組合命令(不包括移動(dòng)命令), 執(zhí)行完”dw”后,”.”會(huì)重復(fù)執(zhí)行”dw”命令, 你可以移動(dòng)光標(biāo),然后再按”.”會(huì)快速地刪除當(dāng)前光標(biāo)處的下一個(gè)單詞,這樣讓人感到難以置信的強(qiáng)大.
現(xiàn)在我們來(lái)看下插入模式. 一些命令(比如i,a,s等)可以讓你進(jìn)入插入模式鍵入文本直到按<Esc>, 說(shuō)到這些命令, 整條命令也包括你在”i”命令和<Esc>之間鍵入的所有字符.
比如”iHello<Esc>”, 會(huì)在當(dāng)前光標(biāo)處插入”Hello”字符,而現(xiàn)在”.”命令可以在當(dāng)前光標(biāo)處重復(fù)插入”Hello”, 現(xiàn)在你應(yīng)該能夠明白強(qiáng)大之處了吧, 但還有更強(qiáng)大的, “A”會(huì)將光標(biāo)移到當(dāng)前行末尾并進(jìn)入編輯模式, 因此, 當(dāng)按<Esc>結(jié)束輸入后,你可以按”.”在任何位置的行末插入相同的字符.
另外一個(gè)更加強(qiáng)大的例子是: “ce”命令, 由”c”和”e”組合而成,”c”(修改)命令會(huì)刪除指定范圍內(nèi)的文本并進(jìn)入插入模式,與”d”(刪除)命令一樣,但唯一不同的是它會(huì)進(jìn)入插入模式而不是停留在正常模式. 這樣的好處是你在這條命令之后所鍵入的文本同樣也會(huì)作為這條命令的一部分. 因此如果你輸入”ceHello<Esc>”, 將會(huì)替換當(dāng)前光標(biāo)位置到行末的內(nèi)容為”Hello”, 而”.”命令同樣也會(huì)重復(fù)這個(gè)運(yùn)作.
動(dòng)作(光標(biāo)移動(dòng)命令)也可以更加復(fù)雜, 有很多各種進(jìn)入插入模式的命令(“o”會(huì)在當(dāng)前行下插入新一行,”O”會(huì)在上面插入新一行,”S”會(huì)刪除到行末的內(nèi)容,等等…所有這些命令都會(huì)進(jìn)入插入模式), 因此你可以想象,使用”.”可以創(chuàng)建重復(fù)執(zhí)行多么強(qiáng)大的編輯命令.
示例#1: 完美的點(diǎn)命令
讓我們來(lái)一個(gè)示例. 比如你已經(jīng)在你的頭文件中聲明了三個(gè)新函數(shù), 然后你需要在模塊里實(shí)現(xiàn)它們. 你復(fù)制下面文本內(nèi)容到你的實(shí)現(xiàn)文件里:
編程差不多都這樣開(kāi)始,不是嗎?
現(xiàn)在你必須刪除這些分號(hào),并且添加一個(gè)空的函數(shù)體. 在上圖光標(biāo)處,你可以輸入”A”直接將光標(biāo)移到行末并進(jìn)入編輯模式:
按"A"之后,注意進(jìn)入插入后光標(biāo)的位置
現(xiàn)在你使用<backspace>鍵刪除分號(hào):
刪除很簡(jiǎn)單
然后 鍵入<return>{<return>}<return>,添加函數(shù)體:
插入跟其它編輯囂一樣
最后,按下<Esc>返回到正常模式下:
現(xiàn)在我們返回到正常模式下
現(xiàn)在你得重復(fù)以上步驟修改另外兩個(gè)函數(shù)。怎么做呢?很簡(jiǎn), 首先按”j”移動(dòng)下移一下光標(biāo),然后 點(diǎn)”.” 復(fù)制上一次執(zhí)行的命令(”A”,刪除分號(hào),插入文本), 如果你按”j.j.”, 兩次,你會(huì)得到如下結(jié)果:
j.j. 命令之后
VI的命令架構(gòu)是關(guān)鍵,<backspace>和正常的輸入都將作為命令的一部分, 并且命令是完全可以重復(fù)執(zhí)行的。回想一下,日常編輯工作中有多少是重復(fù)的操作?
誤解#2: 這不僅僅是正則表達(dá)式
VI/VIM對(duì)正則表達(dá)式的支持很好,很多編輯器都支持查找、替換等操作可以使用正則表達(dá)式,但是只有VI(據(jù)我所知)可以更加高級(jí)地使用正則表達(dá)式,比如執(zhí)行一次正則查找,然后替換”begin”第二次出現(xiàn)的行的包括”proc”的下一行,或者任何你能想到的復(fù)雜操作。
這不是貶低正則表達(dá)式,或者VI/VIM的正則表達(dá)式支持,VI的主要強(qiáng)大之處,當(dāng)你習(xí)慣使用它之后依賴(lài)的強(qiáng)大之處 是它的基本編輯模式:
- 一兩個(gè)鍵就可以在一行或一個(gè)屏幕中任意移動(dòng)到指定位置
- “d”或”c”等命令可以跟其它運(yùn)作相結(jié)合從而直接編輯某些文字,或者進(jìn)入插入模式,并且可以使用”.”重復(fù)任意多次
- 你的雙手可以不離開(kāi)主鍵盤(pán)區(qū)就可以做任何事!這下不必?fù)?dān)心使用筆記本鍵盤(pán)了
示例#2: 智能范圍標(biāo)記
讓我們下看下下面這個(gè)典型示例。這是一個(gè)嵌入在某個(gè)復(fù)雜表達(dá)式中的函數(shù)調(diào)用:
復(fù)雜表達(dá)式中的函數(shù)調(diào)用
如你所看到的,光標(biāo)處是函數(shù)調(diào)用開(kāi)始的位置,現(xiàn)在想象我們想要展開(kāi)它并將它保存在一個(gè)內(nèi)部變量中,首先要做的是選擇這個(gè)調(diào)用函數(shù),然后復(fù)制再將它移動(dòng)到上面,輸入變量名,然后再移動(dòng)到上面輸入函數(shù)聲明。 在通過(guò)編輯模型中,你需要用Ctrl-Right 和左右鍵不斷查找定位,在VIM里不需要這樣。 “%” 會(huì)自動(dòng)移動(dòng)到相匹配的圓括號(hào)(或相似的分組字符), 但是如果你沒(méi)有定位到這些特殊字符位置,它會(huì)一個(gè)字符一個(gè)字符地向右掃描,直到找到第一個(gè),然后再去查找跟它匹配的字符。因此,在上面這種情況下,它會(huì)移動(dòng)到右邊的匹配圓括號(hào)。
我們知道”c”命令,可以刪除字符(同樣會(huì)把它復(fù)制到剪切版 譯注:其它是VI里的BUFFER, 并不是系統(tǒng)剪切版,下同)并且進(jìn)入插入模式,我們可以在上面這種情況下輸入”c%”,然后我們將得到下面結(jié)果:
輸入'c%' ("change match")之后
函數(shù)調(diào)用代碼被放到了剪切版中了,然后我們現(xiàn)在可以輸入變量名稱(chēng)了,輸入兩個(gè)字符不算太難,輸入完變量名之后按<Esc>返回到正常模式,如下:
輸入字符然后按<Esc>
現(xiàn)在進(jìn)入正常模式,你可以鍵入”O”在上面新建一行并進(jìn)入插入模式,然后開(kāi)始鍵入聲明語(yǔ)句:
鍵入 "O" 之后,輸入函數(shù)的聲明 語(yǔ)句前半部分
現(xiàn)在,我們需要插入之前的函數(shù)表達(dá)式,由于它已經(jīng)在剪切版里了,我們可以使用Ctrl-R,”在插入模式下插入粘貼(我承認(rèn)它有點(diǎn)不好記,但它支持復(fù)合剪切版功能). 這將把我們之前聲明的函數(shù)調(diào)用語(yǔ)句插入到當(dāng)前位置”, 我們鍵入一個(gè)分號(hào),然后 按<Esc> 返回到插入模式:
完成
誤解#3:只有書(shū)呆子或天才能用它
好吧,我希望看過(guò)以上的解釋和示例,你已經(jīng)體會(huì)到VI/VIM的強(qiáng)大之處了。學(xué)習(xí)它是艱難的(如下),但如果你會(huì)看復(fù)一年地第天8小時(shí)甚至以上地編碼,這將是繼你學(xué)習(xí)打字之后的第二次最好的學(xué)習(xí)投入(你已經(jīng)理解了,是嗎?如果沒(méi)有,不要怪VI,先學(xué)習(xí)它試試)。幾個(gè)周的困難學(xué)習(xí)會(huì)讓你一生受益,并且,至少不會(huì)有一個(gè)“啞巴助手” 把你煩得要死(譯注: 記得微軟office 97 的曲別針 嗎?)
關(guān)鍵是,用VI時(shí),你的鍵盤(pán)變成了一個(gè)有上百個(gè)按鈕的超級(jí)文字輸入專(zhuān)用手柄, 上面的每個(gè)鍵至少有兩個(gè)功能, 上檔和下檔,因此你至少每次按鍵(不包括Shift鍵)可以實(shí)現(xiàn)200個(gè)功能。文字編輯命令非常強(qiáng)大,并且你甚至可以組合使用它們來(lái)得到最好的結(jié)果,當(dāng)你輸入一些字符時(shí),它是普通的鍵盤(pán),但當(dāng)你回到正常模式下,它是一個(gè)文字錄入設(shè)計(jì)最好的機(jī)器。
示例#3:操縱區(qū)塊受限
另一個(gè)簡(jiǎn)單例子, 這種只有VIM支持(使用了VIM的一個(gè)特別動(dòng)作),假如你的光標(biāo)在尖括號(hào)之間,就像在XML下經(jīng)常遇到的:
Life at an XML tag...
怎樣選擇尖括號(hào)內(nèi)的內(nèi)容呢? 在其它編輯囂中,你需要把手從現(xiàn)在舒適的位置移到到鍵盤(pán)的方向鍵區(qū)域,或者更糟糕,用鼠標(biāo), 無(wú)論怎樣,這可能都是很痛苦的,尤其當(dāng)使用筆記本電腦時(shí)。 但,在VIM里你怎么做呢?你只需要用”i”或”a”開(kāi)頭的文本對(duì)象動(dòng)作命令, “i>”代表“當(dāng)前尖括號(hào)內(nèi)的區(qū)塊”, 所以你可以用”di>”(“刪除尖括號(hào)內(nèi)的內(nèi)容”)來(lái)刪除上面情形下的尖括號(hào)內(nèi)的全部?jī)?nèi)容:
After typing di> ("delete inner angle-block")
你可以使用”(“或”)”代表當(dāng)前括號(hào)的內(nèi)容區(qū)塊(或者”b”), “[" 或"]“,”{“或”}”, “w” 代表語(yǔ)法分隔的單詞,或者”W”代表空格分隔的單詞, 或者在它們前面加上前綴”i” 或”a”實(shí)現(xiàn)相應(yīng)的插入或追加功能。
誤解#4:用hjkl來(lái)移動(dòng)光標(biāo)嗎?
很多人對(duì)使用hjkl來(lái)代替方向鍵移動(dòng)光標(biāo)感到很詫異,原因可能是在當(dāng)時(shí)出現(xiàn)VI的那個(gè)時(shí)代并沒(méi)有方向鍵,而且當(dāng)時(shí)的終端電腦的鍵盤(pán)上還特別為hjkl鍵加印上了方向提示。但這樣設(shè)計(jì)帶來(lái)的一個(gè)副作用就是移動(dòng)光標(biāo)方向的時(shí)候不必將雙手移開(kāi)主鍵盤(pán)區(qū),這很不錯(cuò)。
ADM3A:VI作者Bill Joy最初用它來(lái)編寫(xiě)VIADM3A的hjkl鍵
(譯注: 當(dāng)Bill Joy編寫(xiě)VI的時(shí)候,用的是這臺(tái)電腦,由于時(shí)代久遠(yuǎn),當(dāng)時(shí)這臺(tái)電腦只有一個(gè)主鍵盤(pán)區(qū)(如圖),并且它的hjkl鍵上還印有方向)
但無(wú)論如何,即使你最初使用hjkl, 一旦你完全掌握了VI/VIM之后,你可能根本不會(huì)再用”h”和”l”(左和右),很少使用”j”和”k”。 為什么呢? 因?yàn)橛衅渌鼜?qiáng)大的移動(dòng)命令可以讓你更快地將光標(biāo)移動(dòng)到你想到達(dá)的位置。 當(dāng)在一行內(nèi)移動(dòng)時(shí),我發(fā)現(xiàn)總會(huì)有一個(gè)移動(dòng)命令可以將光標(biāo)直接定位到我想要的地方,所以我會(huì)有那些移動(dòng)命令:”f”后接著任何其它字符 會(huì) 定位到字符下次出現(xiàn)的位置,”%”用來(lái)匹配任何你想去的地方的模式,等等.. . 當(dāng)在文件中導(dǎo)航時(shí),有命令可以直接定位到屏幕的 頂部/中間/底部 的位置,”/“ 可以非常容易地輸入想要查找的字符串,”]]” 可以在函數(shù)間導(dǎo)航 ,等等。
ADM3A的hjkl鍵
示例#4:非常有用的命令
有些命令非常有用一旦你學(xué)會(huì)使用定會(huì)愛(ài)不釋手,”H“,”M“,和”L”可以將光標(biāo)直接定位到屏幕頂部、中間和底部。”zt”,”zz”和 “zb”會(huì)將光標(biāo)保持在當(dāng)前位置不變,滾動(dòng)視圖將它移動(dòng)到屏幕頂部、中間或底部。“×” 會(huì)查找當(dāng)前光標(biāo)所在的單詞的下一個(gè)出現(xiàn)位置(“#”向后查找,在鍵盤(pán)上的對(duì)稱(chēng)位置所以很好記),而且還有更多這樣的命令。。。
誤解#5:由于花90%的時(shí)間思考,10%的時(shí)間編輯,也許有生產(chǎn)效率,但它仍然沒(méi)有用處
這些都是比較夸張的說(shuō)法,但這經(jīng)常被提出來(lái)反對(duì)編輯過(guò)程中獲得的對(duì)提高開(kāi)發(fā)生產(chǎn)效率很重要的好處。我打賭這是錯(cuò)誤的。
首先,有時(shí)候我的確必須要思考一個(gè)問(wèn)題,而不需要去看代碼,我騎上我的自行車(chē)出去騮了一小時(shí),或兩小時(shí),如果天氣好的話(huà),這比呆在電腦前思考好多了。
或者,當(dāng)我必須要分析一些困難的問(wèn)題或設(shè)計(jì)一套方案時(shí),我經(jīng)常拿出一本筆記本(真的紙做的筆記本),一支筆,然后用它們來(lái)梳理我的思路。
我們可以打賭,除非一些特別情況,生產(chǎn)工作不得不在電腦前做。這是因?yàn)?,大多?shù)時(shí)候,你必須看著代碼來(lái)思考或設(shè)計(jì),而這包括在編輯器里瀏覽代碼,而且,通常你的確正在繼續(xù)鍵入或編輯。你可能剛思考了一分鐘,然后 你花了另一分鐘來(lái)編輯實(shí)現(xiàn)你剛剛所想到的,而當(dāng)你編輯的時(shí)候,你想要一個(gè)最好的工具來(lái)工作。
舒服的編輯讓你保持在那個(gè)“思考的領(lǐng)域”, 這個(gè)集中精神的狀態(tài)讓你有最大的生產(chǎn)效率,因?yàn)槟阏莆樟艘粋€(gè)功能強(qiáng)大的工具像一款文本編輯器, 而它其實(shí)從你的意識(shí)中消失了,你可以自由地集中精神于解決問(wèn)題,你會(huì)下意識(shí)地去編輯實(shí)現(xiàn)你的想法。 通常的編輯方法是你查找定位,用Ctrl-Right, Ctrl-Right, Ctrl-Right, Ctrl-Right, Ctrl-Right 定位到你到的地方,然后你要將你的手移到鼠標(biāo)上,打開(kāi)菜單,選擇一個(gè)選項(xiàng),進(jìn)入一連串的對(duì)話(huà)框然后點(diǎn)擊“OK” 確認(rèn)應(yīng)用。 而在VI/VIM中,你所要做的只是簡(jiǎn)單按幾個(gè)鍵,簡(jiǎn)單明了。
其它一些VI用也跟我分享了這些,所以我知道并不只我一個(gè)人有這種感受: 一旦你掌握了vi, 經(jīng)常會(huì)有這種感覺(jué),在30秒鐘編輯之后,你腦中會(huì)響起一種持續(xù)敲擊鍵盤(pán)聲音的記憶, 當(dāng)你在文本的各行、區(qū)塊中穿梭,移動(dòng)和編輯時(shí),感覺(jué)就像這聲音在你腦中響起,而這時(shí)候,你會(huì)有一種強(qiáng)大力量的感覺(jué)。
示例#5: 縮進(jìn)一個(gè)區(qū)塊
VI和VIM能夠理解你的代碼結(jié)構(gòu),這可以從許多命令中體現(xiàn)出來(lái)。像 在上面示例#3中提到的”aB”:選擇當(dāng)前”{“和”}”以及它所包含的內(nèi)容(”a}”同樣). 下面讓我們把它與”>”操作符相結(jié)合,”<”是用來(lái)縮進(jìn)一塊區(qū)域的很有用的命令。代碼如下圖:
不恰當(dāng)?shù)目s進(jìn)
你多長(zhǎng)時(shí)間會(huì)碰到這種情況?是的,你可以粘貼自動(dòng)再次縮進(jìn)(在VIM只需要”]p”),但通常情況下你會(huì)忘記,或者你不是因?yàn)檎迟N這段代碼而導(dǎo)致的這種情況,而是因?yàn)槟闾砑踊騽h除而導(dǎo)致的。你只需要再縮進(jìn)一下即可。在其它編輯囂里,你要移動(dòng)光標(biāo),選擇,然后再按TAB鍵。而在VIM里不需要這樣麻煩,只需要鍵入三個(gè)鍵:”>aB”(“縮進(jìn)一個(gè)區(qū)塊”):
我們甚至沒(méi)有移動(dòng)光標(biāo)
很酷是吧?你沒(méi)有移動(dòng)光標(biāo)或選擇,你只是直接告訴VI我想怎樣做,然后VI就這樣做了。我相信正是這種“直接”編輯方式讓你感覺(jué)到了力量并且讓你進(jìn)入并保持在你的狀態(tài)中。
誤解#6:它只是執(zhí)著快要消逝的過(guò)去
VI已經(jīng)存在30多年了,而它現(xiàn)在戛然存在著。VIM,一個(gè)引進(jìn)甚至比VI更多特性的VI的完全克隆,已經(jīng)存在了15年了,可以在世界上差不多任何一個(gè)平臺(tái)下運(yùn)行。喜歡VI的人們已經(jīng)找到一個(gè)在任何地方使用它的辦法:在Eclipse里有VI的模擬插件,在許多Mac OS X apps 有VI的模擬插件,在IntelliJ IDEA里有VI的模擬插件,這些甚至Emacs都沒(méi)有一個(gè),而卻有一款Emacs 的 VI模擬插件several, Viper, 我開(kāi)發(fā)并且出售ViEmu,一個(gè)家庭插件套裝,使VI可以在Visual Studio, SQL Server, Word 和Outlook中運(yùn)行, Paul Graham 仍然用它來(lái)編寫(xiě)list和arc, Tim O’Reilly 也公開(kāi)承認(rèn)它是Vi用戶(hù),SlickEdit和Crisp也有VI模擬器…
當(dāng)然,VI/VIM的社區(qū)并不是很多:許多計(jì)算機(jī)用戶(hù)甚至不會(huì)熟練打字,并且VI的學(xué)習(xí)曲線(xiàn)又很陡峭,那些見(jiàn)過(guò)輕巧、簡(jiǎn)陋的編輯系統(tǒng)的人,因此VI/VIM編輯器肯定會(huì)繼續(xù)存在很多年。實(shí)際上,用VI/VIM的鍵綁定功能可以讓你更習(xí)慣使用VI并且在未來(lái)任何環(huán)境下都可用, 從舊的Unix操作系統(tǒng)到最新的流行IDE。
示例#6:可視性質(zhì)
作為最后一個(gè)示例,即使看起來(lái)VI是關(guān)于一些神秘難以理解、讓人看不懂的命令,但現(xiàn)在我們將會(huì)看到它的一些更加可視化的方面(事實(shí)上,它們是VIM的特性,而不是原始的VI). 其中之一:當(dāng)”hlsearch”配置打開(kāi)時(shí)(在VIM中默認(rèn)是關(guān)閉的,但是可以使用”:set hlsearch”打開(kāi)), 當(dāng)你搜索一個(gè)字符時(shí),所有匹配的結(jié)果在屏幕中都會(huì)高亮顯示。假設(shè)你有以下html代碼:
HTML代碼
如果你按”*”,會(huì)查找當(dāng)前光標(biāo)下的單詞(”p”),結(jié)果會(huì)是這樣子:
強(qiáng)大的星號(hào)
正如你所看到的,光標(biāo)移動(dòng)了,而且不同地方的結(jié)果都被高亮了。
還有更多,我們知道像”d”和”c”這樣的操作符會(huì)根據(jù)下一條命令執(zhí)行,好的,如果我們想要可視化反饋,我們可以使用可視化模式:按”v”, 移動(dòng)光標(biāo)時(shí)你會(huì)看到從初始位置的區(qū)域到光標(biāo)處會(huì)被高亮,然后接著按下操作符可以直接看到效果。搜索命令在這里同樣適用。 如果你用”V”替代“v”, 會(huì)以行為單位高亮。 現(xiàn)在我們按下 “V”,然后 “k”(上):
按下 Vk之后
如你所見(jiàn),這兩行被高亮以示選中。假如我們想要選擇直到p的閉合標(biāo)簽(如高亮顯示),輸入”N”(上個(gè)匹配結(jié)果):
按"N"之后
現(xiàn)在我們可以做任何我們想做的了,假如”gU”操作會(huì)讓所有字符變?yōu)榇髮?xiě)(然后返回到正常模式下):
華麗的大寫(xiě)
好吧,現(xiàn)在讓我們來(lái)為VI/VIM的理解做下正確的解釋?zhuān)?/p>
正確的理解#1:陡峭的學(xué)習(xí)曲線(xiàn)
有一件事是大家所一致認(rèn)同的,并且也是正確的,這張圖準(zhǔn)確地說(shuō)明了這一點(diǎn):
事實(shí)是,學(xué)習(xí)VI/VIM是非常費(fèi)時(shí)(幾周到幾月),并且第一次嘗試是很不愉快的。我把這一點(diǎn)當(dāng)作是為什么VI/VIM不是,并且將不可能是流行的編輯器的主要原因。相比其它編輯器,你需要付出相當(dāng)多的努力去學(xué)習(xí)、記憶,然后將30條或更多的命令運(yùn)用嫻熟才會(huì)讓你使用VI/VIM更有效率。由于這些命令都是些粗略的一鍵命令(縱使它們都有一些助記方法,甚至有些形式是用起來(lái)是一致的),這仍然不是一項(xiàng)簡(jiǎn)單的任務(wù),簡(jiǎn)單的是認(rèn)輸并且返回使用熟悉的jedit或pico, UltraEdit或TextMate, 或者甚至emacs, 但是一旦你努力學(xué)習(xí)了,我知道沒(méi)有人會(huì)想要再返回用那些編輯器,并且我知道有很多人說(shuō)他們已經(jīng)用VI超過(guò)了10年,并且他們已經(jīng)習(xí)慣,并且在期待即使是最小的細(xì)節(jié)改進(jìn)。
結(jié)尾語(yǔ)
隨便你想用還是不用,如果你覺(jué)得學(xué)習(xí)使用VI/VIM會(huì)白費(fèi)力氣,那就去學(xué)習(xí)Emacs, 或者繼續(xù)用你的差勁的IDE。 無(wú)論如何,在任何情況下,不要再說(shuō)”用VI的人都是些死腦筋“,我希望我已經(jīng)成功地向你展示了為什么他們(我們)堅(jiān)持使用VI/VIM, 并且你至少應(yīng)該能夠理解它的強(qiáng)大,即使你仍然偏向不使用它。