標籤:vi編輯器 編程工具
vi編輯器對老手而言,最大的優點之一就是有很多選項可以使用,而對於新手而言,這也是它的一大痛點。本章介紹基本的vi文本編輯命令。這一篇文章主要介紹如何移動游標,以及如何增加和更改文本。
之前講過,vi編輯器有兩種模式,命令模式和插入模式。在命令模式中,所輸入的一切都會被vi編輯器當做是輸入的命令,而在插入模式中,所輸入的一切都被當做相應的文本更新到檔案緩衝區中。當開啟vi編輯器時,預設是命令模式,有很多方式可以從命令模式轉化為插入模式,例如輸入 "i" 。如果要從插入模式轉化為命令模式,只需按"ESC"鍵即可。因此如果你不知道當前處於vi的哪種模式,可以先按下ESC鍵回到命令模式。
移動游標:
當需要編輯文本時,首先需要做的可能就是將游標移動到需要編輯的地方。移動游標時首先需要確認你處於vi的命令模式中,移動游標有如下命令:
單一的移動:
h: 向左移動一個字元;
j: 向下移動一行;
k: 向上移動一行;
l: 向右移動一個字元;
雖然可以通過上下左右四個按鍵或者通過"BACKSPACE"和"ENTER"鍵來實現移動,但是這四個命令更為常用,因為它可以使我們的手指不離開鍵盤中心就能完成游標的移動。當往某個方向移動到極限時,就無法繼續移動了。可以在這些移動命令前面加上數字,達到命令重複的功能。例如輸入"4l"就相當於按下了4次l命令,即能直接將游標向右移動四個字元。這種命令重複功能可以給我們更多選擇,並增強命令的功能,應該牢記。
在一行中快速移動的命令有兩個:
0: 移動到行的開頭;
$: 移動到行的尾部;
注意在vi編輯器中,螢幕上可見的一行並不一定就是真正的一行,vi編輯器是以分行符號作為行的結尾,因此可能在螢幕上顯示為多行,但實際上就是一行,如所示,雖然螢幕上看上去佔用三行,但實際就是一行:
可以按照文字區塊來移動,文字區塊可以是單詞,句子或段落。
w: 將游標移動到下一個單詞,其中符號和標點也被認為是一個單詞;
W: 將游標移動到下一個單詞,其中標點和符號不被當成一個單詞;
b: 將游標倒退一個單詞,其中標點和符號被當成一個單詞;
B: 將游標倒退一個單詞,其中標點和符號不被當成一個單詞。
當然這些單詞移動的命令也可以加上數值參數,這樣就能同時移動多個單詞,例如2w,5b等。
可以使用" G "命令直接移動到某個特定的行。直接輸入" G "命令,是移動到檔案的尾部,1G是移動到檔案的第一行,即檔案頂端,而10G就能直接移動到檔案的第十行。
編輯文本:
插入新文本:使用“ i ”命令進行文本的插入,i命令使vi編輯器從命令模式轉化為插入模式,之後輸入的一切都會被當成輸入的文本更新到緩衝區中。" i "命令的細節值得說一下:輸入" i "命令時,游標不移動,在游標之前的位置開始插入文本。
添加文本:添加文本使用" a "命令。a命令和i命令基本類似,只不過在輸入" a "命令時,游標會向後移動一個字元,因此是在原先游標之後輸入文本,因此就被稱為"添加"文本。
更改文本:如果需要更改文本,則需要使用" c "命令。更改命令可以認為是先刪除需要被替換的文本,然後等待你輸入新的文本,輸入的文本的長度沒有要求。使用從c命令時,為了告訴c命令有多少文本需要更改,可以把c命令與游標移動命令一起使用:
cw: 從游標所在位置到該單詞的結尾;
c$: 從游標所在位置到該行結尾,也可以直接使用C命令;
c0: 從游標所在位置到該行開頭;
c2b: 從游標位置往回兩個單詞,等等類似用法;
如果需要修改一整行,可以直接輸入cc命令。無論此時游標在該行的何處,cc命令將直接將一整行文本替換成輸入的新文本。cc命令和上面提到的C命令都是其他命令的簡寫形式。
其實不止c命令,其它如刪除( d )命令,拖曳( y )命令等等命令,都有如下的一般形式: ( command ) ( text object )形式。這裡的command 就是我們的c,d,y等命令,而text object則是游標移動命令,指明command影響的文本範圍。因為游標移動命令可以使用數值參數,因此可以這樣使用 "d2w", 而"2dw"也是完全一樣的效果。
" r "命令可以把一個字元替換為另一個字元。而且替換之後直接是命令列模式,不需要按下ESC鍵從輸入模式回到命令模式。
相對於" r "命令,R命令也可以進行字元的替換,但是" r "鍵一次只能替換一個字元,而按下R鍵後,則會進入覆蓋模式。即你輸入的字元將逐一覆蓋原有的字元,直到按下ESC鍵。但是R命令最多隻能覆蓋一整行。
" s "命令:也是用於字元的替換,它可以指定數值參數,代表替換多少個字元。如果只使用" s "命令,則代表替換當前游標所在的字元。" s "命令首先刪除需要被替換的字元,然後等待插入新的字元,插入完畢後需要手動按下ESC鍵重新回到命令模式。
S命令:S命令直接替換一整行文本,不管當前游標在該行的哪個位置,都直接先將該行刪除。因此S命令等同於cc命令,但和C命令有區別。
更改大小寫: 通過" ~ "命令完成對當前字元的大小寫轉換,即當前如果是大寫,則轉化為小寫,如果當前是小寫,則轉化為大寫。更改之後游標自動移到下一個字元。
本章vi編輯器命令總結:
h,j,k,l,w,b,G,i,a,c,cc,C,r,R,s,S,~。
學習vi和vim編輯器(2): 簡單的文本編輯(1)