Vi是unix重要的工具,把幾年來自己使用vi的命令記錄下來,供大家參考!一、Unix編輯器概述編輯器是使用計算機的重要工具之一,在各種作業系統中,編輯器都是必不可少的部件。Unix及其相似的ix作業系統系列中,為方便各種使用者在各個不同的環境中使用,提供了一系列的ex編輯器,包括 ex, edit,ed 和 vi.其中ex,edit,ed都是行編輯器,現在已很少有人使用,Unix提供他們的原因是考慮到滿足各種使用者特別是某些終端使用者的需要。值得慶幸的是,Unix提供了全螢幕的Vi編輯器,這使我們的工作輕鬆不少。不少DOS使用者抱怨Vi編輯器不象 DOS下的編輯器如edit那麼好用,這是因為Vi考慮到各種使用者的需要,沒有使用某些通用的編輯鍵(在各個不同的終端機上他們的定義是不同的,在某些終端機上甚至沒有這些鍵)。而是採用狀態切換的方法,但這只是習慣的問題,一旦你熟練的使用上了vi你就會覺得它其實也很好用。雖然 Vi採用了狀態切換的方法,但電腦的硬體及作業系統多種多樣,某些電腦的鍵盤上沒有特定的幾個功能鍵!那麼不就有某些功能不能用了?這個問題在 Unix 系統上也一樣,幾乎各大電腦廠商都有自己的 Unix 系統,而 vi的操作方法也會隨之有點出入。這裡我們採用 PC 的鍵盤來說明 vi的操作,但在具體的環境中還要參考相應的資料,這一點是值得注意的。二、Vi入門(一)、進入vi在系統提示字元(如$、#)下敲入vi<檔案名稱>,vi可以自動幫你載入所要編輯的檔案或是開啟一個新檔案(如果該檔案不存在或缺少檔名)。進入 vi後螢幕左方會出現波浪符號,凡是列首有該符號就代表此列目前是空的。 (二)、兩種模式如上所述,vi存在兩種模式:指令模式和輸入模式。在指令模式下輸入的按鍵將做為指令來處理:如輸入 a,vi即認為是在當前位置插入字元。而在輸入模式下,vi則把輸入的按鍵當作插入的字元來處理。指令模式切換到輸入模式只需鍵入相應的輸入命令即可(如a,A),而要從輸入模式切換到指令模式,則需在輸入模式下鍵入ESC鍵,如果不曉得現在是處於什麼模式,可以多按幾次 [ESC],系統如發出嗶嗶聲就表示已處於指令模式下了。付:有指令模式進入輸入模式的指令:新增 (append) a :從游標所在位置後面開始新增資料,游標後的資料隨新增資料向後移動。 A: 從游標所在列最後面的地方開始新增資料。插入 (insert) i: 從游標所在位置前面開始插入資料,游標後的資料隨新增資料向後移動。 I :從游標所在列的第一個非空白字元前面開始插入資料。開始 (open) o :在游標所在列下新增一列並進入輸入模式。 O: 在游標所在列上方新增一列並進入輸入模式。(三)、退出vi在指令模式下鍵入:q,:q!,:wq或(注意:號),就會退出vi。其中:wq和是存檔退出,而:q是直接退出,如果檔案已有新的變化,vi會提示你儲存檔案而:q命令也會失效,這時你可以用:w命令儲存檔案後再用:q退出,或用:wq或命令退出,如果你不想儲存改變後的檔案,你就需要用:q!命令,這個命令將不儲存檔案而直接退出vi。(四)、基本編輯配合一般鍵盤上的功能鍵,像是方向鍵、[Insert] 、[Delete] 等等,現在你應該已經可以利用 vi來編輯檔案了。當然 vi還提供其他許許多多功能讓文字的處理更為方便。何謂編輯?一般認為是文字的新增、修改以及刪除,甚至包括文字區塊的搬移、複製等等。先這裡介紹 vi的如何做刪除與修改。(注意:在 vi的原始觀念裡,輸入跟編輯是兩碼子事。編輯是在指令模式下操作的,先利用指令移動游標來定位要進行編輯的地方,然後才下指令做編輯。)刪除與修改檔案的命令: x: 刪除游標所在字元。 dd :刪除游標所在的列。 r :修改游標所在字元,r 後接著要修正的字元。 R: 進入取替換狀態,新增文字會覆蓋原先文字,直到按 [ESC] 回到指令模式下為止。 s: 刪除游標所在字元,並進入輸入模式。 S: 刪除游標所在的列,並進入輸入模式。其實呢,在PC上根本沒有這麼麻煩!輸入跟編輯都可以在輸入模式下完成。例如要刪除字元,直接按 [Delete] 不就得了。而插入狀態與取代狀態可以直接用 [Insert] 切換,犯不著用什麼指令模式的編輯指令。不過就如前面所提到的,這些指令幾乎是每臺終端機都能用,而不是僅僅在 PC 上。在指令模式下移動游標的基本指令是 h, j, k, l 。想來各位現在也應該能猜到只要直接用 PC 的方向鍵就可以了,而且無論在指令模式或輸入模式下都可以。多容易不是。當然 PC 鍵盤也有不足之處。有個很好用的指令 u 可以恢復被刪除的文字,而 U 指令則可以恢復游標所在列的所有改變。這與某些電腦上的 [Undo] 按鍵功能相同。三、附件:vi詳細指令表(一)、基本編輯指令:新增 (append) a :從游標所在位置後面開始新增資料,游標後的資料隨新增資料向後移動。 A: 從游標所在列最後面的地方開始新增資料。插入 (insert) i: 從游標所在位置前面開始插入資料,游標後的資料隨新增資料向後移動。 I :從游標所在列的第一個非空白字元前面開始插入資料。開始 (open) o :在游標所在列下新增一列並進入輸入模式。 O: 在游標所在列上方新增一列並進入輸入模式。 x: 刪除游標所在字元。 dd :刪除游標所在的列。 r :修改游標所在字元,r 後接著要修正的字元。 R: 進入取替換狀態,新增文字會覆蓋原先文字,直到按 [ESC] 回到指令模式下為止。 s: 刪除游標所在字元,並進入輸入模式。 S: 刪除游標所在的列,並進入輸入模式。(二)、游標移動指令:由於許多編輯工作是藉由游標來定位,所以 vi提供許多移動游標的方式,這個我們列幾張簡表來說明(這些當然是指令模式下的指令): ┌—————┬—————————————┬—————┐ │指令 │說明 │功能鍵 │ ├—————┼—————————————┼—————┤ │0 │移動到游標所在列的最前面│[Home] │ ├—————┼—————————————┼—————┤ │$ │移動到游標所在列的最後面│[End] │ ├—————┼—————————————┼—————┤ │[CTRL][d] │向下半頁 │ │ ├—————┼—————————————┼—————┤ │[CTRL][f] │向下一頁 │[PageDown]│ ├—————┼—————————————┼—————┤ │[CTRL] │向上半頁 │ │ ├—————┼—————————————┼—————┤ │[CTRL] │向上一頁 │ [PageUp] │ └—————┴—————————————┴—————┘ ┌——┬—————————————————┐ │指令│說明 │ ├——┼—————————————————┤ │H │移動到視窗的第一列 │ ├——┼—————————————————┤ │M │移動到視窗的中間列 │ ├——┼—————————————————┤ │L │移動到視窗的最後列 │ ├——┼—————————————————┤ │b │移動到下個字的第一個字母 │ ├——┼—————————————————┤ │w │移動到上個字的第一個字母 │ ├——┼—————————————————┤ │e │移動到下個字的最後一個字母 │ ├——┼—————————————————┤ │^ │移動到游標所在列的第一個非空白字元│ └——┴—————————————————┘ ┌——┬———————————————————┐ │指令│說明 │ ├——┼———————————————————┤ │n-│減號移動到上一列的第一個非空白字元 │ │ │前面加上數字可以指定移動到以上 n 列 │ ├——┼———————————————————┤ │n+│加號移動到下一列的第一個非空白字元 │ │ │前面加上數字可以指定移動到以下 n 列 │ ├——┼———————————————————┤ │nG│直接用數字 n 加上大寫 G 移動到第 n 列 │ └——┴———————————————————┘ ┌————┬———————————————┐ │指令 │說明 │ ├————┼———————————————┤ │fx │往右移動到 x 字元上 │ │Fx │往左移動到 x 字元上 │ ├————┼———————————————┤ │tx │往右移動到 x 字元前 │ │Tx │往左移動到 x 字元前 │ ├————┼———————————————┤ │; │配合 f&t 使用,重複一次 │ │, │配合 f&t 使用,反方向重複一次 │ ├————┼———————————————┤ │/string │往右移動到有 string 的地方 │ │?string │往左移動到有 string 的地方 │ ├————┼———————————————┤ │n │配合 /&? 使用,重複一次 │ │N │配合 /&? 使用,反方向重複一次 │ └————┴———————————————┘ ┌————┬———————————————————┬——————————┐ │指令 │說明 │備註 │ ├————┼———————————————————┼——————————┤ │n( │左括號移動到句子的最前面 │句子是以 │ │ │前面加上數字可以指定往前移動 n 個句子 │! . ? 三種符號來界定│ │n) │右括號移動到下個句子的最前面 │ │ │ │前面加上數字可以指定往後移動 n 個句子 │ │ ├————┼———————————————————┼——————————┤ │n{ │左括弧移動到段落的最前面 │段落是以 │ │ │前面加上數字可以指定往前移動 n 個段落 │段落間的空白列界定│ │n} │右括弧移動到下個段落的最前面 │ │ │ │前面加上數字可以指定往後移動 n 個段落 │ │ └————┴———————————————————┴——————————┘(三)、更多的編輯指令這些編輯指令非常有彈性,基本上可以說是由指令與範圍所構成。例如 dw 是由刪除指令 d 與範圍 w 所組成,代表刪除一個字 d(elete) w(ord) 。指令列表如下: d 刪除(delete) y 複製(yank) p 放置(put) c 修改(change)範圍可以是下列幾個: e 游標所在位置到該字的最後一個字母 w 游標所在位置到下個字的第一個字母 b 游標所在位置到上個字的第一個字母 $ 游標所在位置到該列的最後一個字母 0 游標所在位置到該列的第一個字母 ) 游標所在位置到下個句子的第一個字母 ( 游標所在位置到該句子的第一個字母 } 游標所在位置到該段落的最後一個字母 { 游標所在位置到該段落的第一個字母說實在的,組合這些指令來編輯檔案有一點點藝術氣息。不管怎麼樣,它們提供更多編輯文字的能力。值得注意的一點是刪除與複製都會將指定範圍的內容放到暫存區裡,然後就可以用指令 p 貼到其它地方去,這是 vi用來處理區段複製與搬移的辦法。某些 vi
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/603218/viewspace-1054661/,如需轉載,請註明出處,否則將追究法律責任。
|