大家來學VIM(一個歷久彌新的編輯器)[三]

基本編輯指令

 

這個單元就開始進入主題了。下編輯指令都是在 commond-mode(c-mode),就是您一進入 vim 時的模式,只能下指令,不能鍵入文字。如果印象模糊,請瞄一下第一個單元的內容。這個單元說的是基本的指令,有些比較特殊的編輯指令,因為太有個性了,所以會獨立成一個單元來說明。

 

 

進入i-mode指令

i  在游標所在字元前開始輸入文字(insert)。
a  在游標所在字元後開始輸入文字(append)。
o  在游標所在行下開一新行來輸入文字(open)。
I  在行首開始輸入文字。

  • 此之行首指第一個非空白字元處,要從真正的第一個字元處開始輸人文字,可使用 0i 或 gI(vim)。
A  在行尾開始輸入文字。

  • 這個好用,您不必管游標在此行的什麼地方,只要按 A 就會在行尾等著您輸入文字。
O  在游標所在行上開一新行來輸入文字。
J  將下一行整行接至本行(Joint)。

  • 並無相對的 split 功能,可在 i-mode 下按 Enter 來達成,當然如果您熟 macro 的話,可自行定義。
  • 使用 J 時,預設會消去本行的 EOL,且上下行接縫間會留下一個空白字元,這符合英文習慣,卻對中文會造成困擾,欲不留空白字元,可使用 gJ(大寫 J) 指令,但這是 vim 的擴充功能,elvis 不適用。
  • 請您隨便找一個檔案來試看看,光看文字說明太抽象了。


 

刪除指令

x  刪除游標所在處之字元。在 vim 及 elvis 亦可用 Del 鍵。
X  刪除游標前之字元。不可使用 Backspace 鍵。

  • vim 可以正確使用以上兩個指令於中文,會刪去一個中文字。elvis 則不行,一個中文字要刪兩次,即使用 xx。
dd 刪除一整行(delete line)。
dw 刪除一個字(delete word)。不能適用於中文。
dG 刪至檔尾。
d1G 刪至檔首。或 dgg(只能用於 vim)。
D  刪至行尾,或 d$(含游標所在處字元)。
d0 刪至行首,或 d^(不含游標所在處字元)。

  • 請回憶一下 $ 及 ^ 所代表的意義,您就可以理解 d$ 及 d^ 的動作,這就是 vi(m) 可愛之處。


取代和還原

r  取代游標所在處之字元。vi(m) 很有個性的,您在 c-mode 按
   了 r 她就會停在那裡等主人鍵入所要替代的字元,希望您這
   個當主人的,不要傻呼呼的也楞在那裡,趕快鍵入您的新字元
   吧!:-)

  • vim 中可用於中文字,也就是可以替換一個中文字,elvis 則不行。當然您的 vim 是要設在 taiwan 的才行。怎麼樣!有沒有看過如此有個性的取代方式?ㄚ!r 就是 replace 啦!
R  取代字元至按 Esc 為止。
cc 取代整行內容。或大寫 S 亦可。
cw 替換一個英文字(word),中文不適用。(change)
~  游標所在處之大小寫互換。當然不能用於中文。別忘了 Shift!
C  取代至行尾,即游標所在處以後的字都會被替換。或 c$。
c0 取代至行首,或 c^。
s  替換一個字元為您所輸入的字串。和 R 不同,R 是覆蓋式的取
   代,s 則是插入式的取代,您可親自實驗看看。ㄟ!是小寫的
   s。
u  這個太重要了,就是 undo,傳統的 vi 僅支援一次 undo,vim
   及 elvis 就不只了,vim 是沒有限制的。
U  在游標沒離開本行之前,回復所有編輯動作。
Crtl+r 這個也是很重要,就是 redo 鍵。


 

加上數目字

喔!騷到 vi(m) 的癢處了,這是 vi(m) 一個非常騷包的功能,只此一家別無分號(當然同源的 ed,sed 等不在此限)。就是您可以在大部份的指令前加上數目字,代表要處理幾次的意思。以下用實例來說明比較清楚。

5dd  刪除游標所在處(含)起算以下五行內容。妙吧!
3r   按了 3r 後,您鍵入一個英文字,則三個字元皆會被您所鍵
       入的英文取代。很抱歉,這不能用於中文。
5J   將五行合併成一行。
3x   刪除三個字元。抱歉,不能用於中文。
5i A 然後按 Ecs,插入五個 A。中文也可以!
2i system Esc  插入 systemsystem。中文也可以!
5G 游標移至第五行,是從檔首開始起算。
5l 移至右第五個字元處,當然 j 是可以用方向鍵取代的。
   所有移動指令(參考第二單元)都可以加上數目字來控制,中
   文也通喔!elvis 當然是不能用於中文。

其它的指令和數目字結合,就留待各位去發掘吧!最重要的是請您親自操作看看,使用 vi(m) 常常要動動腦筋,會有更妙的操作方式。



簡單的重排功能

>>  整行向右移一個 shiftwidth(預設是 8 個字元,可重設)。
<<  整行向左移一個 shiftwidth(預設是 8 個字元,可重設)。

  • :set shiftwidth? 可得知目前的設定值。:set shiftwidth=4 可馬上重設為 4 個字元。shiftwidth 可簡寫成 sw。ㄟ,別忘了 Shift 鍵!
:ce(nter)  本行文字置中。注意是冒號命令!
:ri(ght)   本行文字靠右。
:le(ft)    本行文字靠左。

  • 所謂置中、靠左右,是參考 textwidth(tw) 的設定。如果 tw 沒有設定,預設是 80,就是以 80 個字元為總寬度為標準來置放。當然您也可以如 sw 一樣馬上重設。
gqip  整段重排。中文會出槌!:-(
gqq   本行重排。

  • 重排的依據也是 textwidth。這裡的重排是指您鍵入文字時沒有按 Enter 鍵,就一直在 keyin,這樣會形成一個很長的一行(雖然螢幕上會替您做假性折行),重排後,則會在每一行最後加入 EOL。gq 重排功能是 vim 才有的功能。

你可能感兴趣的:(vim)