普通人的編輯利器——VIM

來源:互聯網
上載者:User

轉自 善用佳軟:http://blog.sina.com.cn/s/blog_46dac66f010005kw.html

寫作時間:2006/12/04

去年5月,我開始用VIM。此後漸入佳境,原來因著作權自律而放棄盜版UltraEdit的遺憾一掃而空。並且,從VIM我才體會到,什麼才是真正的編輯利器。在善用佳軟或其他論壇發文,我都是先在VIM中輸入,並方便高效地編輯好格式,再貼到網上。而我的通訊錄、記事、讀書筆記、工作記錄也是在VIM中完成的。包括一些文檔、資料的處理,讓VIM過一下,也會提高不少效率。一句話,自用VIM以來,對它迷戀日深,幾乎要超過Total Commander。但是,正如善用佳軟及論壇發文所提,我大力推薦“用IrfanView/XnView代替ACDSee、用7-zip代替 WinRar/WinZip、用GIMP代替PhotoShop”,但並未推薦VIM代替UltraEdit。這並不意味著VIM不能勝任,恰恰相反,如果說IrfanView等替代品比原共用軟體還有些差距的話,VIM則遠勝UltraEdit。不推薦的唯一原因是,VIM對初學者有點難。

但今天仍寫了此文推薦給大家。原因有二:其一,編輯大人選定了題目,要向福士宣講VIM和Emacs,這種勇氣鼓舞了我。其二,已發兩位高手的文章(王垠之《Emacs是一種信仰!世界最強編輯器介紹》,Dieken之《程式員的編輯器——VIM》)可能會嚇住一些對它們產生了興趣的人,對此我要做些修正。

因此本文內容有二:一是幫新手體驗VIM。這部分有些像實驗教程,多用執行個體,且行文風格盡量傻瓜化,以便於新手(包括以前從未聽說過VIM)可以照我的操作,一步步體驗VIM。二是介紹我的應用程式,即VIM如何便利我的日常工作和生活,而非編程。

1 對VIM的基本介紹

一句話介紹就是:VIM是一個超級超級強大的文字編輯器。它和Emacs是一個數量級;而我認為,比UltraEdit、Editpad、 EmEditor要高一個(至少半個數量級)。如果你有興趣,不妨一讀《程式員的編輯器——VIM》,以便於對VIM有更詳盡全面的理論認識。

要點1:VIM及前身VI,曆史悠久(可能比多數讀者的年齡更大),經曆了幾十年的考驗和發展,值得信賴。

要點2:VIM有模式。通俗地做一下對比。notepad無模式(或稱為只有一種編輯模式),你按下j,就是在本文中輸入j;要儲存,就要ctrl+ s;要下移一行,就要↓或滑鼠。而在VIM中,開啟一個檔案後,並不處在編輯模式,而是Normal模式,此時你按j,VIM並不認為你要在本文中輸入 j,而是代表游標下移一行。此時按i表示進入insert模式,即編輯模式,即notepad的模式。編輯模式按Esc退回normal模式。 normal模式下按:進入命令列模式,用於輸入較複雜的命令。比如:w代表儲存檔案,:e a.txt代表開啟檔案a.txt。即VIM可以不用滑鼠、方向鍵、菜單、Ctrl、alt……發出命令。因此,以下的體驗中切記進入正確的模式:Esc 到Normal;Normal下i到編輯;Normal下:到命令列。再說明一點是:文中:打頭的是命令列模式,此外多數Normal模式。

要點3:複雜對抗複雜。VIM有的命令列很嚇人,長長一串字元恍若天書。這些貌似複雜,實際上無非是一些簡單命令的組合而已。藉助於此,VIM使用者可以實現非常複雜的需求。如果你沒有這樣的需求,就無須理會它們。

要點4:一能百能。這一點是Unix或命令列風格軟體的顯著長處,經過實用可以深刻體會。本文儘管有一些例子,但它運用之妙,存乎一心的感覺,仍未能充分展示。這裡先打個比方,如果windows下某軟體號稱能炒菜,那意味著你點一下菜單,菜就做好了——這就是易用哲學。到底怎麼做,你是沒有多少發言權的,而是由軟體開發人員固化。而如果VIM說能,那它就是有一個“炒菜”命令,你可以把這個命令與原有的“原料”“數量”“火候”“風味”“灶具”命令結合在一起用,甚至在它前面加上“買菜”“洗菜”,後面加上“裝盤”“洗碗”做成一個自動指令碼,在合適的情況下自動執行。

要點5:無限靈活,個性由我。你只要有具體需求,VIM幾乎都能滿足。因此不同人的VIM是不一樣的,即,把下載來的VIM配置成自己的VIM。

就此打住,開始體驗之旅吧!

2 下載和安裝

VIM是跨平台的。在Windows下,我們用的是gVIM for windows版。最新的是7.0版,下載包約8MB,完整安裝後約20MB。

註:體積太大?你如果是高手,完全可以把不用的檔案刪除(包括協助檔案,它是我見過的軟體中最好的協助),精簡後的體積可以不到2MB。或反之,僅下載一個gVIM.exe(1.5MB)就能運行。但對於這次體驗,鑒於第一次使用,建議全部按預設項安裝,這樣才能達到文中預想的結果。

PCOnline下載,官方下載

安裝,基本上,一直Agree、Next就行了。我通常是裝在d:/program files/VIM下。

可參見






3 體驗之旅

3.1 初見介面

安裝完成後,按提示開啟readme,你將看到

或自行開啟案頭的捷徑,也可直接運行d:/program files/VIM/VIM70/gVIM.exe,你應該看到如此介面:


什嗎?難看?土?我第一次見到它也是這種感覺,現在卻只覺得親切。

再一點,你有沒有奇怪它是中文介面?難道我給你下載的是漢化版?會不會捆綁流氓外掛程式啊?你如果真這樣想,我只能歎息無語了。

3.2 試讀html

請把此網頁儲存為htm,比如test.htm,然後用VIM開啟它。暫時用菜單吧!結果可能是這樣:

平平無奇,是吧?因為它是一個標準的VIM,並且是效能優先,視效忽略的VIM。無妨,請進入命令列模式(就是按一下冒號,注意是英文冒號:),注意到最下面一行的變化了吧。再輸入sy on再斷行符號。是不是有顏色了?它應該看起來象這個樣子

重要提醒:為簡化起見,下文將用

:sy on

表示(先確認在Normal模式,如不確認,請按幾次Esc)你先按:進入命令列模式,再輸入sy on,再斷行符號。

補充說明:sy表示文法加亮,on當然是開啟。:sy clear表示取消加亮。

3.3 改頭換面

體驗VIM就要按VIM的思路,所以我們要把gVIM改回VIM的本來面目。

對了,如果你認為它的介面很土,請更要多看一眼當前的樣子,因為下面的操作後可能會更土!

執行如下命令

:set go=

這時的VIM應該是

不要大驚小怪,不就是菜單和工具列不見了嘛?VIM中是不應該用到它們的。

補充說明:set表示一般性設定;go是gui option的縮寫,就是介面;等於空就是什麼都沒有

再輸入半條命令(先不要斷行符號)

:colo ev

然後,按一下tab鍵。是不是自動補全為evening了?VIM是非常聰明的(但是不會象MS Word那樣自做聰明)。

然後你斷行符號,看到了什嗎?

天色全黑了?沒錯,現在是evening嘛。

補充說明:colo就是設定調色方案。VIM內建了近十種調色方案,當然你還可以在網上下載更多,或改編自己的調色方案。你可以直接在:colo (加一個空格)就連續tab,選擇不同的色彩配置來體驗一下。當然,evening是比較經典的一種。我一直就用它。

3.4 準備並開啟範例檔案

簡化起見,請下載test.txt並儲存為d:/test.txt。然後,在VIM中輸入半條命令

:tabnew d:/t

輸到這裡後不要斷行符號,按一下tab,VIM會自動補全為test.txt的。如果不對,再按幾次tab,直到正確為止。然後斷行符號。

你會看到VIM開啟了test.txt,並且是以多頁簽(tab page)的方式。你可以點擊各頁簽在開啟的檔案中間切換(高手有更方便的鍵盤命令做法)。在VIM6.3中,還沒有此功能。當然了,這並不意味著VIM 的使用者沒辦法享受多頁簽的便利,下載一個外掛程式後——VIM有上千個外掛程式——就可以了。面對多頁簽風格的流行(IE6→Maxthon→IE7), VIM7.0也新增了此功能。

我喜歡這種簡單的頁簽。如果你認為此頁簽太難看,可試一下:set go=e

這時應如下效果

3.5 統一格式,下載vimrc

上面所操作的各種命令,都是對VIM的設定。把它們寫到一個_vimrc檔案中就成了預設選項。每個VIM使用者的_vimrc檔案都不一樣,因為每個人的需求不同。

為了保證下面的操作得到預期的效果,請下載我的_vimrc。依次執行下述操作:
① 關閉所有的VIM

② 找到你的d:/program files/vim/vim7/_vimrc,複製一份。

② 右鍵點擊此處,“另存新檔”覆蓋你的d:/program files/vim/vim7/_vimrc。

註:這並不是標準做法,但對windows使用者是比較方便的做法。

3.6 開啟test.txt

再次就模式進行提醒:Esc到Normal;Normal下i到編輯;Normal下:到命令列。

運行VIM,並在命令列執行

:e d:/test.txt

接下來,我們把此文章排一下版。如果你認為可以手工排版,請把此檔案複製到10000行再發表意見。

3.7 分段並儲存

原文沒有分段,觀察一下,發現可以在“以下是……”前面加斷行符號,於是
:%s/以下是//r&/gc

輸入後,介面如下

並提示,請回答y或a。如果回答y,則替換當前一個;到了下一個,VIM還會再問你。所以,你回答幾個y後不妨一a了之,全部替換。

補充說明:s表示替換;s/a/b/ 表示把a換為b;上一命令是把“以下是”換為“/r&”,/r表示斷行符號,&表示被替換的部分,即“以下是”;%則表示全文;/gc表示一直替換(不是僅替換第一個),並且要使用者確認。

看一下檔案,你或許想,空2行可能更好。很簡單,再重複一下剛才的命令就好了。不過,對強大的VIM來說,無須笨笨地重複輸入上次的命令。在命令列按下:後,再按一下↑(向上的方向鍵),看到剛才的命令了吧?直接斷行符號,提問時輸入a,任務完成。

既有變化,請及時儲存。命令是

:w

當然,你也可以按ctrl+s。但ctrl+s之所以有效,是因為我在_vimrc中做了定義:當按下ctrl+s時,系統執行:w動作。因此,你完全可以定義其他熱鍵,並把它映射到:w。

3.8 繼續編輯

首先刪除“堅持”兩字,很簡單,只要按gg2x就行了。為了看效果,你可以分開按:
gg,這時游標移到文章頭。

2x,這時刪掉了2個字元。

再一次體驗VIM的神奇,比如按5x,於是5個字元消失了。當然,這5個字元是要保留的,沒關係,你按一次u,就回來了吧?

再按一下Ctrl+r,是不是又沒了?再來一次u,是不是又回來了?沒錯。u和Ctrl+r相當於(是相當於不是等同於)windows的undo和redo。

再試一下dd。是不是整行沒有了?沒關係,u回來就行了。

再試一下3dd。一下子刪除了3行!沒關係,u回來。

再來一個dG,哇,全文都沒了?!仍然u回來啊。

3.9 更多編輯

任務a:把每一句分為一行,即達到如下效果

以**為榮、

以**為恥,

解決:如果你記得上面的替換命令,就會想到,可以用2次替換(“為榮、”換為“為榮、”加斷行符號,“為恥,”換為“為恥,”加斷行符號)。但這兩次替換在VIM中完全可以一次完成,即用Regex,在“為”及後面2字元(“榮、”或“恥,”)後加入斷行符號。怎麼表示呢?

:%s/為../&/r/gc

看一下高亮,沒問題,直接a


哇,是不是很壯觀啊?沒覺得?如果是一千行一萬行呢?

任務b:把行末的標點去掉,即後的頓號和後的逗號。

解決:辦法太多了,仍可以用替換。但此處還是展示一個新功能:列操作。

安全起見,按兩下Esc,再gg$,這時游標應到了文章第一行最後一個字元,即頓號上。

再按ctrl+v,注意一下狀態列是否提示有“可視 塊” 字樣。(請確認你是採用了xbeta的_vimrc檔案,如果沒有,請試一下ctrl+q)

再15jx,是否標點全部刪除了?因為15j表示向下選中15行,x表示刪除。

任務c:錯落有致

操作:這次示範一下宏的用法,請嚴格按本教程操作。

先做一下確認:IME沒有開啟,並Esc到normal狀態,gg到文首。

按qa(q表示開始錄製宏,宏的名字為a)

再shift+>>(表示按住shift,連按兩下>,再放開shift。此時第一行應當向後tab了一下)

再j^(此時下移一行,共置游標於行首)

再shift+>>再shift+>>(即第二行向後tab兩下)

再j^(下移一行,並將游標置於行首,為後續操作做準備)

再q(表示宏錄製結束,VIM會提示記錄完成)

這樣宏錄完了,可以用了。

再@a,看到了效果了吧?宏執行了一次,即3、4行成功了。還剩下6段,但是你不用按6次@a,而是只要按下6@a就行了!!!

太神奇了!回放一下?先u,再來一次6@a。既然可以6,當然可以千千萬萬!

補充說明:高手使用VIM是千變萬化的。上面的前2個操作(分行+刪標點),完全可以合成一個:%s//(為./).//1/r/gc;或再把第3個操作(錯落有致)融合到前一個操作中。

3.10 自由體驗

體驗游標移動:請隨意按幾下j和k,看看反應;再多按幾下l和h,看看反應;然後,當你的游標在英文時,請按幾下w和b。

對了,gVIM的每一種功能,都有無限可能,因此,你也可以在上面幾個字母前加上數字,比如 9w 2h,看它的反應。

體驗自動補全:i進來吧,到目前為止還沒寫過字呢!為簡單起見,你直接把用滑鼠放到中文的下一行,我們把 Eight Do's and Eight Don'ts 輸入一遍。但是,輸入一個E,先別動!按ctrl+p是不是自動補全了?

體驗大小寫(每次操作後,都用u恢複原狀),試一下g~~和guu和gUU和g??(g??後可以不按u,再按一次g??也能恢複原狀)

神奇嗎?這還是VIM功能的單個表演,真正的高手是把它們組合在一起,完成你自己獨特的編輯需求。

3.11 體驗文法高亮和摺疊

此部分講起來太複雜。如果你有其他編輯器如UltraEdit基礎,會有助於你理解。但VIM在此方面的強大靈活,UltraEdit是難忘其項背的。

仍然是我們編輯的原檔案,為簡化計,請下載test2.txt;下載tx1.vim並儲存在d:/program files/vim/vimfiles/syntax/tx1.vim

用VIM開啟(比如要開啟d:/test2.txt,請在VIM中:tabnew d:/test2.txt)它。平平無奇是嗎?這是因為VIM並不知道這個檔案要加亮。鍵入一個命令:setf tx1,這就相當於告訴VIM此檔案的類型是tx1,所以就按照剛下載的tx1.vim進行高亮和摺疊。

此時你會發現test2.txt完全折起來了。如何開啟?你可用滑鼠點最左邊的+,當然,也可以用命令zr或zR開啟(zR開啟全部;zr開啟當前;zM摺疊全部;zm摺疊當前)。開啟後,看到高亮效果了吧。可以對文字設定前景色彩、背景色、粗、斜、底線風格。

3.12 加密檔案

文字檔開啟最快,編輯起來最容易,並且在VIM中尋找非常方便。因此,我用它來記日記,並作為通訊錄。但是安全問題怎麼辦呢?很簡單,VIM本身即可加密(錄然解密也要用VIM)。在上述開啟的檔案中鍵入:X(是大寫X),VIM就提示你設定密碼,安全起見要確認第2次。然後,儲存(鍵入:w)。把 VIM或此檔案關閉,再開啟時,就要輸入密碼了。只有你輸入正確的密碼,才能得到正確的檔案。

4 我的應用程式

VIM和Total Commander一樣,我把它們都設定為開機自動運行,其應用不可勝數。

比如說通訊錄管理,我未用任何軟體,就用VIM管理一個address.txt。它可以實現:快速啟動(我在VIM中定義了書籤,鍵入`A就會開啟),加密(用VIM的:X),超強搜尋(無須多說),分組摺疊(fold),email和電話號的高亮顯示(自訂文法檔案)吧。

再比如,筆者會用VIM來輔助word, excel, bbs發文,安全刪除檔案,製作精簡的五筆詞庫等。具體可參見 《我常用的VIM功能》,《活學善用gVIM,提高工作效率:執行個體篇(合集)》,《用gVIM打造個人化記事本》等文章。

如下兩圖分別是我的個人化txt樣本,和用VIM寫此篇文章時的情況:

5 後記

這篇文章比最初計劃寫得長很多,但仍感覺很多非常優秀的功能沒有提到。比如,眼下我寫這篇文章,當然用VIM。但是因為有插圖,所以用了htm格式。在插入圖片時,我只要輸入img,VIM會自動換為“<img src="">”,並把游標放到兩個引號中間,以便於我輸入圖片名稱。我輸入lnk後,VIM會替換為“<a href=""></a>”。當我想看一下效果時,我只要:! g:/study/it/pconline/vim/xbeta-vim.htm 它就自動在瀏覽器中開啟了。而這一個長長的路徑,因為有了自動補全和命令列曆史,也非常容易。而當一些url還未確定,需要標註時,我就用一個`1,VIM就會以醒目的紅色塊標出來,一目瞭然。而下次再開啟此檔案,它會記得我最後編輯的位置。

在用VIM之前,我曾試過幾十種pad和editor,包括長期用Editpad,也曾經比較精通過UltraEdit,也曾經測過EmEditor, EditPlus等。但用了VIM之後,我不再關心windows世界的成千上萬的編輯器。因為使用它們的邏輯是“如果有新需求,只能等軟體升級或換一個軟體”,而使用VIM的邏輯則是“如果有新需求,請做個人化配置或下載外掛程式”。

VIM在手,夫複何求!

最後,向VIM所代表的追求卓越、開源共用的精神致敬!並希望有責任感的使用者逐漸減少盜版!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.