Gentoo Logo

學習 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快照

Fig. 1: 快照

如果您是vi的新手,試著在您的系統上安裝gvim。在gui介面使用vi可以讓初心者 較容易學習。

2.  第一步

選一個檔案

在您使用vi去編輯檔案之前,您必須知道如何利用vi在一份資料中移動。vi有 一堆移動的指令,我們將會帶您看看其中的一些。在文件的這一部分,請藉由 以下指令將一個不重要的文字檔案載入進vi:

原始碼 2.1: 載入一個檔案到vi中

$ vi myfile.txt

如果您已經安裝好vim,請輸入vim myfile.txt。如果您想要用gvim, 請輸入gvim myfile.txtmyfile.txt應該為您系統上 的文字檔。

在vi環境中

進入vi後,您應該會看到一部分的文字檔案內容在您的螢幕上出現。恭喜--您已經在 vi環境中了!並不像其他編輯器,當vi啟動時會在一個被稱做指令模式的環 境中。這表示當您從鍵盤按下l時,並非在目前的位置差入一個l的符 號,而是會將游標移至那一行的最右邊。在指令模式中,您在鍵盤上輸入的字符是用 來當作指令輸入,而非把字符插入文字中。其中最必要的指令之一就是移動指令;讓 我們來看看吧!

3.  移動

在vi中移動,第一部份

當在指令模式中,您可以利用hjkl 來將游標往左,下,上和右移動。當您在較新版本的vi中,您也可以使用方向 鍵來達到這目地。而hjkl沒有取消,是 因為當您習慣使用他們時,您的手可以不需移到方向鍵就可以移動游標。請試 著利用hjkl(和方向鍵)在檔案中移動。 試試利用h來移動游標直到移至一行的第一個位置。請注意當游標已經 在一行的第一個位置如果您再繼續按h,vi並不會將游標跳到上一行的 位置。同樣的,您也不行藉由輸入l來從一行的最後一個字元移到上一 行。

在vi中移動,第二部份

vi有提供一些用來在一行開頭或結尾處移動的熱鍵。您可以按下0 (零) 來跳到一行的一第一個字母,或者用$來跳到最後一個字母。請試試看吧! 自從vi有了這些如此有用的移動指令後,這使得vi變得有一點像"pager"(就像是 more或是less指令)。如果您將vi當作pager來學習也會幫助您來更快速的學習移 動的指令。

您也可以利用<CTR>F<CTR>B來一次往下或往上 移動一頁。在較新版的vi(例如vim)也允許您使用PGUPPGDOWN 鍵來達到一樣的結果。

文字中移動,第一部份

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: 小抄

Fig. 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.txtfilename.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: 含編輯指令的小抄

Fig. 1: 小抄

7.  插入模式

到目前為止,我們已經說明完如何在vi中移動,操作檔案i/o,和操作一些簡單 的編輯指令。但是,我們到現在並沒有教您如何在自由的型式中輸入文字! 這是故意的,因為vi的插入模式在剛開始是有一點點複雜。但是當您熟悉插入 模式後他的複雜(和彈性)將會變成一種很方便的功能。

在vi的插入模式,您將可以直接的輸入文字到螢幕上,就像其他許多編輯 器一樣。當您一旦做了改變,以可以按下Esc來回到指令模式。您可以 利用ia來進入插入模式。如果您輸入i,您輸入的字將 會被插入到目前的字前面,而如果您按下a,您所加的字將會被 附加在目前的字後面。記住,在您入完文字後,請按下<ESC>來回 到指令模式。

插入模式的好處

請繼續而且試著使用ai指令。按下ai,並且 輸入一些字,而且按下ESC來回到指令模式。在按下ai後,試著 按下<ENTER>,而且看看發生什麼事情。試著利用方向鍵和<DEL>鍵 感覺一下插入模式是怎樣運作的。藉由方向鍵和<DEL>鍵,您可以 進行大量的編輯步驟而不需要一直輸入指令和離開插入模式。

插入模式的選項

這裡也有其他方式可以進入插入模式。按下A(大寫)來從該行的結尾 處增加資料,而不是從你目前的位置開始。另外,按下I(大寫)來從 該行的起頭來插入文字。按下o在目前這行下建立一個新的一行 來輸入文字,而輸入O(大寫)可以增加一個空行在目前行的上面來增加 文字。如果要用一整個新行來取代目前這行可以按下cc。如果要完全取 代目前位置到該行結尾,輸入c$。如果要取代目前位置到該行的起頭, 請輸入c0

為了要完成這種操作,這些指令將會進入插入模式。在輸入完您的字之後, 請按下<ESC>來回到指令模式。

改變文字

到目前為止我們已經會使用一些c(改變,change)指令當我們按下。 ccc0c$時。cc是一種特別型式的改變指令, 有點類似dd。而c0c$指令是用來結合移動指令的範例。 在這裡,c作用的方式有點類似d,除了他讓你自動進入差入模 式輸入你想要的文字在剛剛刪除的區域。請試著將c結合一些移動指令 並且在你的檔案中測試一下(提示: cWcec)

8.  組合指令

vi真正變成有用是當你開始使用組合的("結合")指令,就像是d{cw。除了這些指令外,您也可以結合一些數字和移動指令,就像 是3w,這會告訴vi一次往右跳三個字。這裡有一些移動"結合"指令 的範例:12b4j

vi,為了要讓(數字)(移動指令)結合,也允許dc去跟數字或 移動指令作結合。所以d3w將會刪除後三個字,d2j會刪除目前 和接下來兩行,等等。試試看一些cd結合移動指令來感受一 下vi的強大功能和簡單的編輯指令吧。一旦這些指令變成潛意識,您將可以非 常快速的去編輯檔案。

更新您的小抄

又到了我們更新小超的時間啦!到目前為止應該長的像這樣子:


圖示 8.1: 有組合指令的小抄

Fig. 1: 小抄

眾多的特色

目前為止,我們已經介紹了如何移動,存檔和離開,進行簡單的編輯和刪除, 和使用插入模式。目前為止看到在小抄上的所有東西,您應該可以使用vi 來進行任何任務了。

然而,vi雖然已經有如此多有用的指令。在這一節中,您將會學到如何剪下複製貼上搜尋取代,及如何使用自動斷行 的功能。這些指令都將會使得vi更有趣和更有用。

視覺模式

要使用複製和貼上最好的方式就是用視覺模式,一種特別的模式已經在新的版 本中加入,就像是vim和elvis。您可以把視覺模式想成"高亮度文字"模式。一旦文字 被提高亮度,他就可以被複製或刪除,然後貼上。如果您使用gvim,您可以利用滑鼠 左鍵簡單的拖拉選取您想要的特定區域:


圖示 8.2: 有被提高亮度文字的VIM

Fig. 2: 被提高亮度的文字

除此知外,您可以藉由按下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: 最後的小抄

Fig. 3: 小抄

請隨身帶著小抄,然後開始利用vi來編輯檔案和編排emails。當需要時拿 看小抄;您將會發現在一個星期內,您將會記憶住所有的指令然後您的 vi技巧將會突飛猛進!

如果您想要使vi變成您預設的編輯器,請作一些改變到/etc/rc.conf:

原始碼 8.1: 設定vi變成預設的編輯器

(設定EDITOR變成您想要的編輯器。)
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
#EDITOR="/usr/bin/emacs"

資源

當您繼續學習vi時,下面有一些資源您也許需要:

關於這很文件

最原始版本是發布在IBM developerWorks,為Westtech Information Services 的財產。這文件是原始版本的更新版,並且Gentoo Linux文件組改進很多東西。



列印

最後更新 2005年 7月 21日

這份文件的原始版本已不再被維護

大綱: 這份指南將會教您如何使用vi,利用一個類似小抄的方法來加速學習的程序。 這是用來提供vi新手的第一個使用說明。

Daniel Robbins
Author

Eric Stockbridge
Author

Benny Chuang
Editor

Frid
Translator

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.