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或:x(注意:號),就會退出vi。其中:wq和:x是存盤退出,而:q是直接退出, 

如果文件已有新的變化,vi會提示你保存文件而:q命令也會失效,這時你可以用:w命令保存文件後再用:q 

退出,或用:wq或:x命令退出,如果你不想保存改變後的文件,你就需要用: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][u] │向上半頁                  │          │ 
├—————┼—————————————┼—————┤ 
│[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 版本,例如 Linux 所用的 elvis 可以大幅簡化這一坨指令。如果稍微觀察一下這些編輯指令
就會發現問題其實是定範圍的方式有點雜,實際上只有四個指令罷了。指令 v 非常好用,只要按下 v 鍵, 
光標所在的位置就會反白,然後就可以移動光標來設定範圍,接著再直接下指令進行編輯即可。 
對於整列操作, vi 另外提供了更方便的編輯指令。前面曾經提到過刪除整列文字的指令 dd 就是其中一個 
;cc 可以修改整列文字;而 yy 則是複製整列文字;指令 D 則可以刪除光標到該列結束爲止所有的文字。 
(四)、文件操作指令 
文件操作指令多以 : 開頭,這跟編輯指令有點區別。 
:q 結束編輯(quit) 
:q! 不存檔而要放棄編輯過的文件。 
:w 保存文件(write)其後可加所要存檔的檔名。 
:wq 即存檔後離開。 
zz 功能與 :wq 相同。 
:x 與:wq相同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章