學習 vi -- "小抄"的方法
1.
剛開始
簡介
這份文件將會教您如何去使用vi,一個功能強大的視覺化編輯器。並且使用較
特別的小抄的方法,這份文件是設計用來使您不需要花費太多時間即
可以變成一個精通於vi的使用者。在這份文件中,您會學到在插入模式下如何
移動,編輯文字,複製貼上文字和vi特別的功能,就像視覺模式和多視窗編輯。
如果您不清楚或在用vi時感到不方便,您可以藉由這一篇文件來使您快速的學得
在Linux/UNIX上最普遍且功能強大的視覺化編輯程式之一。
關於這篇文件
在學習vi時常常會遇到一個困難點 -- vi有一大推指令。為了要能有效的利用vi
,您必須要去記憶其中的一些指令。這會花去您一段時間,而這份文件的其中一
個目地就是不希望花去您太多時間。所以,首先我們必須先挑戰 -- 我們應該如
何幫您在短短的時間內記憶一大堆指令?
為了要面對這挑戰,就像是我之前提過的,我們將會把他通通放在一個vi的小抄
裡。這個小抄將會包含所有vi重要的指令。在您閱讀完這份文件後,如果您忘記
一些特定的指令您可以參考這一份小抄。經過一段時間,當您已經記住這些指令
您依靠小抄的機會就會越來越小了。藉由利用做小抄的方法,您將可以快點學會
如何使用vi。
學習的步驟
在這份文件中,我們將會用一些方法去幫助您學習。第一步,我們將會為您解釋
一些特定的指令是如何運作,您應該會希望知道這個。再來,我們將會要求您試
著在vi中使用這些指令(用來練習),而且再來我們希望您能將這些指令寫到您的
小抄(為了以後參考用)中。如果您想要更快的學習vi,一步步跟著步驟做是很重
要的。在vi中試試指令然後寫到您的小抄中,這將會幫助您記憶這些指令。
vim簡介
vi有很多版本,我們將要為您介紹vi的其中一個版本叫vim。vim是一個普
遍,且有更多的功能使得vi更好用(無論如何,我們將會用例子來說明,並且為他
做個筆記)。如果您想安裝vim,您可以從www.vim.org
取得。另外,為了增加vi的功能,也有gvim,一個可以被設定用在
GTK+ gui library的好用的圖形化編輯器。以下是我的系統上面的gvim快照:
圖示 1.1: VIM快照 |
 |
如果您是vi的新手,試著在您的系統上安裝gvim。在gui介面使用vi可以讓初心者
較容易學習。
2.
第一步
選一個檔案
在您使用vi去編輯檔案之前,您必須知道如何利用vi在一份資料中移動。vi有
一堆移動的指令,我們將會帶您看看其中的一些。在文件的這一部分,請藉由
以下指令將一個不重要的文字檔案載入進vi:
原始碼 2.1: 載入一個檔案到vi中 |
$ vi myfile.txt
|
如果您已經安裝好vim,請輸入vim myfile.txt。如果您想要用gvim,
請輸入gvim myfile.txt。myfile.txt應該為您系統上
的文字檔。
在vi環境中
進入vi後,您應該會看到一部分的文字檔案內容在您的螢幕上出現。恭喜--您已經在
vi環境中了!並不像其他編輯器,當vi啟動時會在一個被稱做指令模式的環
境中。這表示當您從鍵盤按下l時,並非在目前的位置差入一個l的符
號,而是會將游標移至那一行的最右邊。在指令模式中,您在鍵盤上輸入的字符是用
來當作指令輸入,而非把字符插入文字中。其中最必要的指令之一就是移動指令;讓
我們來看看吧!
3.
移動
在vi中移動,第一部份
當在指令模式中,您可以利用h,j,k和l
來將游標往左,下,上和右移動。當您在較新版本的vi中,您也可以使用方向
鍵來達到這目地。而h,j,k和l沒有取消,是
因為當您習慣使用他們時,您的手可以不需移到方向鍵就可以移動游標。請試
著利用h,j,k和l(和方向鍵)在檔案中移動。
試試利用h來移動游標直到移至一行的第一個位置。請注意當游標已經
在一行的第一個位置如果您再繼續按h,vi並不會將游標跳到上一行的
位置。同樣的,您也不行藉由輸入l來從一行的最後一個字元移到上一
行。
在vi中移動,第二部份
vi有提供一些用來在一行開頭或結尾處移動的熱鍵。您可以按下0 (零)
來跳到一行的一第一個字母,或者用$來跳到最後一個字母。請試試看吧!
自從vi有了這些如此有用的移動指令後,這使得vi變得有一點像"pager"(就像是
more或是less指令)。如果您將vi當作pager來學習也會幫助您來更快速的學習移
動的指令。
您也可以利用<CTR>F和 <CTR>B來一次往下或往上
移動一頁。在較新版的vi(例如vim)也允許您使用PGUP和PGDOWN
鍵來達到一樣的結果。
文字中移動,第一部份
vi也允許您一次移動到單字的左邊或右邊。如果要移動到下一個字的第一字
元,請按w。如果要移動到下一個字的最後字母,請按e。如
您要移動到上一個字的第一個字母,請按b。試試看吧!
文字中移動,第二部份
在介紹過單字的移動指令後,您也許會發現vi將foo-bar-oni當成五個分開
的單字!這是因為vi預設是利用空白或符號來分辨單字。因此foo-bar-oni
會被分成以下幾個單字:foo, -, bar, - and oni.
有時候結果是您想要的,有時候則不是。幸運的,vi也能知道如何去辨別"bigword"
。vi可以只藉由空白或newlines來判定bigwords。這表示foo-bar-oni
會被分成五個單字,而只會被分成一個vi的bigword。
文字中移動,第三部份
為了要往前或往後移動一個bigword,您可以利用大寫的字母移動指令。
利用W來移動到下一個bigword的第一個字母,E來跳到下一個
bigword的最後一個字母,而可以利用B來移動道前一個bigword的第一
個字母。試試看吧,順便比較看看單字和bigword的結果這樣您就可以了解他
們的差別。
大一點的移動
我們剛剛已經學到一些指令了,現在可以開始將他們通通寫進小抄中。您可以
利用(和)符號在上一節或下一節間移動。再來,您可以按下{
或}在目前這段的開始或下一段的開始間移動。試試看吧!
4.
離開
我們已經介紹了一些基本移動指令,但是還有一些連結的指令您必須應該要知
道。輸入:q會離開vi。如果這沒有作用,可能是您有更動到檔案內容。
如果您想離開vi,不管您是否有改變檔案內容,可以輸入:q!。您現在
應該已經回到指令列了。
在vi中,任何的指令都是利用:做為開頭這通常被稱作ex-mode指令。
這是因為vi有內建一個飛視覺化的編輯器叫做ex。他可以被稱為一個以
列為基本的小型編輯系統。再來,用來離開vi,剛剛我們已經看過了。如果您曾
經在指令模式下輸入Q,您會轉換到ex模式中。如果您曾遇過這情形,
您會被要求加上 : 符號,而且按下enter後他會將內部的畫面往上捲。為了要回
到vi,您可以輸入vi並按下enter。
5.
小抄
小抄的一開始
我們已經介紹很多指令了,這時候也該是將他們寫到我們小抄上的時候。為了
寫小抄,您將會需要一張信紙或一張A4大小的紙(我們將會將一大堆的資料寫
在小抄上面!)。這邊有我寫的小抄的照片,裡面包含到目前為止所講過的所有
指令。如果可以您可以試著跟著我的格式將所有資料寫上去。
圖示 5.1: 小抄 |
 |
vi的其他功能
讓我們繼續快速的學習我們的vi指令。在指令模式下,您可以藉由輸入G來
一次移動到某一行。如果要移動到第一行,請輸入1G。請注意G是大
寫。
如果您想要移到下一個特定的文字片斷,請輸入/<regexp>並且按下
enter。請把<regexp>換成您要找尋的文字片斷。如果您不曉得要如何
使用正規化表示,別怕 -- 輸入/foo 將會移動到下一個foo出現的位
置。唯一您需要注意的是,當您想要找尋文字的^,.,$或
\符號。請在前面加上倒斜線 (\),如此您就可以找到他。舉例來說,
/foo\.gif將會搜尋下一個叫"foo.gif"的文字片斷。
如果想往前尋找,請按n。要往後尋找,請按N。同樣的,請在您的vi
環境中試試看。您也可以試試看利用//來移動到最後找到的地方。
6.
儲存和編輯
儲存和另存
我們已經讓您試過如何利用ex指令的:q來離開vi。如果您想要儲存您
的變更,請輸入:w。如果您想將他存到另一個檔案,請輸入:w filename.txt
來將他存成filename.txt。如果您想要儲存且離開,請輸入:x或:wq。
在vi(或是其他從vi發展出來的編輯器,像elvis)的中,您可以在緩衝區中一次
開啟多個檔案。如果要在新的視窗中開一個檔案,請輸入:sp filename.txt。
filename.txt將會開啟在一個新的編輯用的分割視窗中。為了要在分割
視窗中轉換,您可以輸入<CTR>w<CTR>w(control-w 兩次)。任何
:q,:q!,:w和:x只會作用在目前作用的視窗中。
簡單的編輯
現在是時候來學習一些簡單的編輯指令。我們會將這些指令稱為簡單是
因為他們仍是在指令模式下。而較複雜的編輯指令將會自動的放在插入模式
中 -- 一個可以讓您從鍵盤中輸入一些文字資料。我們將會在後面為您介紹。
現在請試著重覆按下x來刪除一些字。您會看到x會刪除在游標
下的字。現在請移動到您檔案中的隨便一處,並且按下J(大寫)。您將會
發現J指令會告訴vi將下一行的內容連到目前這行的結尾處。現在,請
移動到一個字母上並且按下r,然後輸入一個新的字母。您會發現原本的
字母被替換了。最後,請移動到檔案中的任何一行然後輸入dd。您會發現
dd會消除目前這一整行。
取代和刪除
您可以藉由按下.鍵來重覆您上一次使用的指令。如果您想試,您將會發現
如果您輸入dd...將會刪除4行,J......會加入四行。同樣的,vi
也有提供其他方便使用的捷徑。
要刪除文字,您也可以利用d指令來與任何移動指令結合。例如,
dw會刪除從目前位置到下一個字中間的字母;d)會刪除到
下一節的結尾,而d}則會刪除目前這一段所剩下的字。您可以試
著結合其他的指令直到您可以好好用他。
回復上一步!
我們已經學會了刪除,現在應該是學習如何去回復任何改變。藉由按下u,
較舊版本的vi可以允許您只回復到上一個動作。但是在較新版本的vi中可以允許
您重覆按下u來持續回復任何在您檔案中所做的改變。請試試看將一些d
的指令和u結合一起用。
更新您的小抄
是時後來更新小抄了!在更新完所有我們講過的指令,您的小抄應該起來像這樣子:
圖示 6.1: 含編輯指令的小抄 |
 |
7.
插入模式
到目前為止,我們已經說明完如何在vi中移動,操作檔案i/o,和操作一些簡單
的編輯指令。但是,我們到現在並沒有教您如何在自由的型式中輸入文字!
這是故意的,因為vi的插入模式在剛開始是有一點點複雜。但是當您熟悉插入
模式後他的複雜(和彈性)將會變成一種很方便的功能。
在vi的插入模式,您將可以直接的輸入文字到螢幕上,就像其他許多編輯
器一樣。當您一旦做了改變,以可以按下Esc來回到指令模式。您可以
利用i或a來進入插入模式。如果您輸入i,您輸入的字將
會被插入到目前的字前面,而如果您按下a,您所加的字將會被
附加在目前的字後面。記住,在您入完文字後,請按下<ESC>來回
到指令模式。
插入模式的好處
請繼續而且試著使用a和i指令。按下a或i,並且
輸入一些字,而且按下ESC來回到指令模式。在按下a或i後,試著
按下<ENTER>,而且看看發生什麼事情。試著利用方向鍵和<DEL>鍵
感覺一下插入模式是怎樣運作的。藉由方向鍵和<DEL>鍵,您可以
進行大量的編輯步驟而不需要一直輸入指令和離開插入模式。
插入模式的選項
這裡也有其他方式可以進入插入模式。按下A(大寫)來從該行的結尾
處增加資料,而不是從你目前的位置開始。另外,按下I(大寫)來從
該行的起頭來插入文字。按下o在目前這行下建立一個新的一行
來輸入文字,而輸入O(大寫)可以增加一個空行在目前行的上面來增加
文字。如果要用一整個新行來取代目前這行可以按下cc。如果要完全取
代目前位置到該行結尾,輸入c$。如果要取代目前位置到該行的起頭,
請輸入c0
為了要完成這種操作,這些指令將會進入插入模式。在輸入完您的字之後,
請按下<ESC>來回到指令模式。
改變文字
到目前為止我們已經會使用一些c(改變,change)指令當我們按下。
cc,c0和c$時。cc是一種特別型式的改變指令,
有點類似dd。而c0和c$指令是用來結合移動指令的範例。
在這裡,c作用的方式有點類似d,除了他讓你自動進入差入模
式輸入你想要的文字在剛剛刪除的區域。請試著將c結合一些移動指令
並且在你的檔案中測試一下(提示: cW,ce,c)
8.
組合指令
vi真正變成有用是當你開始使用組合的("結合")指令,就像是d{
和cw。除了這些指令外,您也可以結合一些數字和移動指令,就像
是3w,這會告訴vi一次往右跳三個字。這裡有一些移動"結合"指令
的範例:12b,4j。
vi,為了要讓(數字)(移動指令)結合,也允許d或c去跟數字或
移動指令作結合。所以d3w將會刪除後三個字,d2j會刪除目前
和接下來兩行,等等。試試看一些c和d結合移動指令來感受一
下vi的強大功能和簡單的編輯指令吧。一旦這些指令變成潛意識,您將可以非
常快速的去編輯檔案。
更新您的小抄
又到了我們更新小超的時間啦!到目前為止應該長的像這樣子:
圖示 8.1: 有組合指令的小抄 |
 |
眾多的特色
目前為止,我們已經介紹了如何移動,存檔和離開,進行簡單的編輯和刪除,
和使用插入模式。目前為止看到在小抄上的所有東西,您應該可以使用vi
來進行任何任務了。
然而,vi雖然已經有如此多有用的指令。在這一節中,您將會學到如何剪下
,複製和貼上,搜尋和取代,及如何使用自動斷行
的功能。這些指令都將會使得vi更有趣和更有用。
視覺模式
要使用複製和貼上最好的方式就是用視覺模式,一種特別的模式已經在新的版
本中加入,就像是vim和elvis。您可以把視覺模式想成"高亮度文字"模式。一旦文字
被提高亮度,他就可以被複製或刪除,然後貼上。如果您使用gvim,您可以利用滑鼠
左鍵簡單的拖拉選取您想要的特定區域:
圖示 8.2: 有被提高亮度文字的VIM |
 |
除此知外,您可以藉由按下v來進入視覺模式(如果您在指令列下使用vi
,這可能是您唯一的選項。) 然後,利用移動指令來移動游標(基本上是方向鍵)
,您將可以將一個區域的文字提高亮度。一但提高了,接下來您可以準備剪下
或貼上文字了。
假如您想要複製文字,按y(意思是"yank")。假如您想要剪下文字,
按d。您將會回到指令模式。現在,移動到您想要插入您剪下或複製
文字的地方,然後按P在游標的後面插入文字,或p在游標
前插入。恭喜,剪下/複製和貼上已經完成!在進行下一個比較進階的節之前
請試試看複製/剪下和貼上的操作。
取代文字
為了要取代片斷的文字,我們使用ex模式。如果您想要取代在該行的
第一個片斷,請輸入:s/<regexp>/<replacement>/然後
按下<ENTER>其中 <regexp>是您所想要尋找且<取代>
的字串。如果要取代您那行中所有的片斷,請輸入:s/<regexp>/<replacement>/g
然後按下enter。如果要取代您檔案中所有的片斷(通常這是您想要的),請
輸入:%s/<regexp>/<replacement>/g然後按下enter。
如果您想要進行全域取代,但是需要vi提醒您做每一個改變,請輸入
:%s/<regexp>/<replacement>/gc(c可以想成是"confirm")
然後按下<ENTER>
縮行
vi支援自動縮行,是用於您想要編輯原始碼時。大部份較新版本的vi中(像vim)
會自動開啟自動縮行模式在您編輯原始碼檔案時(舉例:像.c檔)。
當自動縮行被啟動時,您可以利用<CTR>d(control-d)來往左
縮行一格,利用<CTR>t (control-t)來往右縮行一格。如果自動
縮行的功能沒有自動啟動,您可以藉由在ex下輸入:set autoindent
來自動啟動自動縮排。您也可以利用:set tabstop指令來設定您想要的
縮排長度;:set tabstop=4是比較普遍使用的。
我們最後的小抄
嗯!~我本已經到達了vi手冊結尾!在增加完小抄上所有的進階指令,他應該會
長成這個樣子:
圖示 8.3: 最後的小抄 |
 |
請隨身帶著小抄,然後開始利用vi來編輯檔案和編排emails。當需要時拿
看小抄;您將會發現在一個星期內,您將會記憶住所有的指令然後您的
vi技巧將會突飛猛進!
如果您想要使vi變成您預設的編輯器,請作一些改變到/etc/rc.conf:
原始碼 8.1: 設定vi變成預設的編輯器 |
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
#EDITOR="/usr/bin/emacs"
|
資源
當您繼續學習vi時,下面有一些資源您也許需要:
關於這很文件
最原始版本是發布在IBM developerWorks,為Westtech Information Services
的財產。這文件是原始版本的更新版,並且Gentoo Linux文件組改進很多東西。
|