Vi使用與操作
在介紹如何使用vi之前,瞭解vi具有兩種基本模式是很重要。這兩種基本模式為輸入模式和指令模式。輸入模式為輸入命令,文本就會顯示在螢幕上;而指令模式為輸入命令就執行命令,而不會顯示文字。理解指令模式最簡單方式就是想象平時剪下、複製以及粘貼資料時所發生的情況。
在預設狀態下,vi以指令模式下啟動,因此你輸入命令時不會顯示文字,除非你輸入命令切換至輸入模式。大多數vi命令不會螢幕上顯示任何東西,你只需要知道它們的工作過程就足夠了。使用[Esc]鍵可以在輸入模式和指令模式之間切換。如果你已經處於指令模式中,使用[Esc]將會告訴vi,你已經輸入命令並將要執行命令。如果你沒有輸入任何命令,在指令模式中按下[Esc]鍵將中斷操作。
現在我已經介紹了vi的基本操作,你可以動手試用一下。首先,在你的工作站開啟一個終端視窗,你只需在$提示中輸入vi然後按斷行符號鍵就可以啟動vi編輯器。
接著,你將看到彈出一個頁面左下角有一個~符號的空白檔案。這一符號不容易看到,但是你看到的這些~符號正是表示處於檔案的底部。當對檔案儲存之後,這些符號就不會顯示出來。 若要編輯某個檔案或者為一空白檔案命名,你可輸入vi filename。vi filename可以是一個已經存在的檔案名稱或者是一個給新檔案指定的名稱。
通用輸入模式
一旦進入編輯文檔,除了使用[Esc]切換方法,還有其它很多方法使vi進入到輸入模式。很多其它的方法都包含使用一個vi指令。這些指令可以立即讓vi進入輸入模式,由此輸入的字元立即以文字出現在文檔中。常用的指令為:
i 這是一個輸入命令,即從游標所在位置前面開始插入文字,游標後的文字隨新增文字向向移動。 如果是一個空白文檔,文字將會輸入在文檔的左上方。
I 在行命令開始處的輸入模式,即在當前行的開始處輸入文字。與Word中的按下鍵後輸入文字類似。
a 這是一個新增命令,即從游標所在位置後面開始新增文字,游標後的資料隨新增文字向後移動。
A 這是一個新增到行命令的操作,即從游標所在行最後面的地方開始新增文字。這與Word中的按下鍵後輸入文字類似。
o 這是一個命令之下的開啟行命令,即在游標所在行下面新增一行並進入輸入模式。
O 這是一個命令之上的開啟命令,即在游標所在行上方新增一行並進入輸入模式。
編輯之後使用以上任一命令,將會返回到指令模式。
游標移動指令
接下來需要學習的是vi中的瀏覽命令。以指令模式在文檔中移動,可以使用以下的命令:
h:將一個文字移動到左邊
j:往下移動一個文字
k: 往上移動一個文字
l: 將一個文字移動到右邊
在滑鼠與GUI的環境中,這些移動命令看似有些過時,但是它們都被包含於所有vi版本就廣泛應用。很多時候,游標號,上游標,下游標,左游標,右游標都會起到作用,但是操作者應該將termcap與terminfo屬性包含在這些命令之中。
以下的其它移動指令也可笥邪鎦 骸 ?br /> [Ctrl]f 向下移動一頁指令。這將使得游標在文本中向下移動一頁。
[Ctrl]b 向後移動一頁指令。這將使得游標在文本中向後移動一頁。
[Ctrl]u 向下移動半頁指令。這將使得游標在文本中向下移動半頁。
^ 行命令開始處。游標將會移動到行的開始處。
$ 行命令結束處。游標將會移動到行的結束處。
w 移動到上一個文字的開始。
b 移動到下一個文字的開始。
e 文字末端指令。
G 移動到檔案的末端。
常規功能
在一般的文字編輯器中,所有的功能,比如刪除,更改,剪下,複製,粘貼,以及搜尋/替代等,都可以在vi中找到。很多指令都可以將編輯狀態進入輸入模式,而又可以使用[Esc]來終止。常規使用的編輯指令包括:
x:刪除字元命令,即刪除游標所在字元。
dw:刪除文字命令,即刪除游標處的文字。
dd:刪除行命令,即刪除游標所在的行。
D:刪除到行末端,即刪除從游標所在位置到行末端的所有文本。
cw:改變文字命令,即游標所有位置的文字將隨著輸入文字而改變,至到按下[Esc]。
r:替代字元命令,即游標所在位置的字元將被輸入的字元替代,至到按下[Esc]。
R:替代多行字元命令,即游標所在位置到右邊所有的字元將被輸入的字元替代,至到按下[Esc]。
絕大多數這些指令都可以通過組合而提高其功能。
例如,如果你輸入2dd,vi將刪除兩行文本。
剪下與粘貼等操作
與其它很多編輯器一樣,你可以在文檔中使用剪下與粘貼文本。以下命令是可以使用的最為簡單的剪下與粘貼操作。
yy 複製行命令。游標所有行的文本將被複製到類似剪下板的緩衝器。注意到可以使用多個複製命令更改這一命令以將多行文字剪下到緩衝器。
yl 複製字元命令。游標所有行的字元將被複製到類似剪下板的緩衝器。可以使用多個複製命令更改這一命令以將多行字元剪下到緩衝器。
p 後放置命令。在當前游標位置之後放置或粘貼緩衝器的內容。對於複製行命令,緩衝器的內容將被粘貼在當前行之後。對於複製字元行命令,緩衝器內容將被粘貼在游標的右邊。
P 前放置命令。在當前游標位置之前放置或粘貼緩衝器的內容。對於複製行命令,緩衝器的內容將被粘貼在當前行之前。對於複製字元行命令,緩衝器內容將被粘貼在游標的左邊。
使用複製和放置指令時,你也可以字元指令而使用多個緩衝器或剪下板。這些字元可為a-z,並且只能是小寫字母。例如,ayy將當前行內容複寫到緩衝器A,ap命令將緩衝器的內容粘貼在當前行之前。
Vi中最為重要的命令要算undo指令。這一命令十分簡單:只需要按下u。按下u鍵就可以撤消最近使用的一次指令。 與undo命令類似的是 redo命令。按下句號鍵(.)將會重新鍵入最近的指令。例如,如果你使用cw來改變一個文字,你可以尋找這一文字然後使用句號.來這一文字。
其它兩個重要的命令為search命令。為了在文檔中向前尋找,可鍵入/text,text即為你尋找的內容。重要的是一定注意,只有輸入內容完全的匹配,你才可以尋找到。Vi不支援混合查詢或者模糊查詢。對於向後尋找,可鍵入?text,text即為尋找的內容。
編輯指令
在指令模式中,很多組命令都可以首碼:。與以上提及的命令不一樣,一旦輸入一個冒號,所有指令都出現在螢幕的左下角,並可以在執行之前編輯。以下是常用的重要的:指令。 :w 編寫檔案命令。如果你輸入:w然後斷行符號,當前檔案將被寫入硬碟。如果使用的是一個空白文檔,將會出現“沒有當前的檔案名稱”的訊息。可以使用:w檔案名稱將一個空白文檔或當前文檔寫入到另一檔案。
:w!或:w檔案名稱 覆蓋檔案命令。如果輸入:w!然後斷行符號,檔案將會被當前新輸入的名稱而覆蓋。這可用於檔案的覆蓋。
:q 退出命令。如果正常保持,輸入:q將會終止整個操作。
:q! 退出而不需要保持命令。在不需要儲存檔案的情況下退出。
:%s/find_text/replace_text/
查詢與替代命令
正如上面提及一樣,可以改變查詢命令為一個查詢與替代命令。使用:%s命令可以告訴vi查詢文檔中所有行。/find_text命令與以上的查詢命令類似,當其尾碼/replace_text/,時,/find_text操作結果的第一行將會被替代。為了將/find_text所有內容被替代,可以增加一個g(全域),比如:%s/find_text/replace_text/g。
你不要只使用單一的指令。你可以將多個指令結合使用。例如,:wq!將會儲存檔案到硬碟並退出vi而返回到指令狀態。 Vi=包含全部 (Very involved) 以上提及的內容只是vi功能的一小部分。你可以一起執行指令串,以標記方式複製而粘貼文本,或者使用sed指令。你還可以將shell script的輸出或其它指令插入到你的文檔中。 以上涉及到的例子和指令將可以帶你進入vi的大門。很多vi使用者在操作時都會記住一些命令。從其它使用vi的人可以學會更多的vi指令,而此時你或許驚歎vi的強大。然而,你應該記住一點:經常地使用:a指令,因為vi
沒有提供自動後台文檔儲存功能。
詳細說明如下:
****進入vi的命令****
**********
vi filename :開啟或建立檔案,並將游標置於第一行首
vi +n filename :開啟檔案,並將游標置於第n行首
vi + filename :開啟檔案,並將游標置於最後一行首
vi +/pattern filename:開啟檔案,並將游標置於第一個與pattern匹配的串處
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢複filename
vi filename....filename :開啟多個檔案,依次進行編
**********
****移動游標類命令****
**********
h :游標左移一個字元
l :游標右移一個字元
space:游標右移一個字元
Backspace:游標左移一個字元
k或Ctrl+p:游標上移一行
j或Ctrl+n :游標下移一行
Enter :游標下移一行
w或W :游標右移一個字至字首
b或B :游標左移一個字至字首
e或E :游標右移一個字至字尾
) :游標移至句尾
( :游標移至句首
}:游標移至段落開頭
{:游標移至段落結尾
nG:游標移至第n行首
n+:游標下移n行
n-:游標上移n行
n$:游標移至第n行尾
H :游標移至螢幕頂行
M :游標移至螢幕中間行
L :游標移至螢幕最後行
0:(注意是數字零)游標移至當前行
$:游標移至當前行尾
**********
****螢幕翻滾類命令****
**********
Ctrl+u:向檔案首翻半屏
Ctrl+d:向檔案尾翻半屏
Ctrl+f:向檔案尾翻一屏
Ctrl+b;向檔案首翻一屏
nz:將第n行滾至螢幕頂部,不指定n時將當前行滾至螢幕頂部。
插入文本類命令
i :在游標前
I :在當前行首
a:游標後
A:在當前行尾
o:在當前行之下新開一行
O:在當前行之上新開一行
r:替換當前字元
R:替換當前字元及其後的字元,直至按ESC鍵
s:從當前游標位置處開始,以輸入的文本替代指定數目的字元
S:刪除指定數目的行,並以所輸入文本代替之
ncw或nCW:修改指定數目的字
nCC:修改指定數目的行
**********
****刪除命令****
**********
ndw或ndW:刪除游標處開始及其後的n-1個字
do:刪至行首
d$:刪至行尾
ndd:刪除當前行及其後n-1行
x或X:刪除一個字元,x刪除游標後的,而X刪除游標前的
Ctrl+u:刪除輸入方式下所輸入的文本
**********
****搜尋及替換命****
**********
/pattern:從游標開始處向檔案尾搜尋pattern
?pattern:從游標開始處向檔案首搜尋pattern
n:在同一方向重複上一次搜尋命令
N:在反方向上重複上一次搜尋命令
:s/p1/p2/g:將當前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:將檔案中所有p1均用p2替換
**********
****選項設定****
**********
all:列出所有選項設定情況
term:設定終端類型
ignorance:在搜尋中忽略大小寫
list:顯示製表位(Ctrl+I)和行尾標誌($)
number:顯示行號
report:顯示由面向行的命令修改過的數目
terse:顯示簡短的警告資訊
warn:在轉到別的檔案時若沒儲存當前檔案則顯NO write資訊
nomagic:允許在搜尋模式中,使用前面不帶“\”的特殊字元
nowrapscan:禁止vi在搜尋到達檔案兩端時,又從另一端開始
mesg:允許vi顯示其他使用者用write寫到自己終端上的資訊
**********
****最後行方式命令 ********
**********
:n1,n2 co n3:將n1行到n2行之間的內容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下
:n1,n2 d :將n1行到n2行之間的內容刪除
:w :儲存當前檔案
:e filename:開啟檔案filename進行編輯
:x:儲存當前檔案並退出
:q:退出vi
:q!:不儲存檔案並退出vi
:!command:執行shell命令command
:n1,n2 w!command:將檔案中n1行至n2行的內容作為command的輸入並執行之,若不指定n
1,n2,則表示將整個檔案內容作為command的輸入
:r!command:將命令command的輸出結果放到當前行
**********
****寄存器操作****
**********
"?nyy:將當前行及其下n行的內容儲存到寄存器?中,其中?為一個字母,n為一個數字
"?nyw:將當前行及其下n個字儲存到寄存器?中,其中?為一個字母,n為一個數字
"?nyl:將當前行及其下n個字元儲存到寄存器?中,其中?為一個字母,n為一個數字
"?p:取出寄存器?中的內容並將其放到游標位置處。這裡?可以是一個字母,也可以是一個數字
ndd:將當前行及其下共n行文本刪除,並將所刪內容放到1號刪除寄存器中。
收藏邀請