1.命令的操作範圍
實際上,vim的很多命令都只在一個文本範圍內進行編輯操作。一個文本範圍可以是一個字元、一個字、一行或其它指定的字元範圍。使用vim命令和文本範圍修飾鍵可以更好地完成編輯任務。這類命令的格式如下:
命令+操作範圍
其中的命令可以為:
d:刪除(delete)命令。刪除制定範圍的文本,並將它們儲存到臨時緩衝區。
y:拷貝(yank)命令。複製指定範圍的文本到臨時緩衝區。
p:粘貼(put)命令。將臨時緩衝區的內容粘貼到當前游標處。
附:系統會在緩衝區保留最後9個被刪除的行。因此,如果想恢複最後一次被刪除的行則在非編輯狀態下使用“"1p”命令。如果想恢複倒數第2次被刪除的行則在非編輯狀態下使用“"2p”命令。
c:修改(change)命令。它是刪除命令與插入命令的組合。
其中的操作範圍可為:
e:從游標所在位置至該字的最後一個字元。
w:從游標所在位置至下一個字的第一個字元。
b:從游標所在位置至前一個字的第一個字元。
$:從游標所在位置至該行的最後一個字元。
0:從游標所在位置至該行的第一個字元。
(:從游標所在位置至該句子的第一個字元。
):從游標所在位置至下一個句子的第一個字元。
{:從游標所在位置至該段落的第一個字元。
}:從游標所在位置至該段落的最後一個字元。
gg:移至文首
GG:移至文末
2.命令的大小寫
另外還有一些基本的命令,大寫形式一般是該命令的增強版本或實現相反的功能:
i(insert):插入命令,在游標的前面插入文本。
I(insert):插入命令,但在游標所在行的行首插入文本。
a(append):附加命令,在游標的後面插入文本。
A(append):附加命令,但在游標所在行的行尾插入文本。
o(open):開啟命令,在所在游標的下一行增加新行,並從行首開始插入文本。
O(open):開啟命令,在所在游標的上一行增加新行,並從行首開始插入文本。
x:刪除游標處的字元。
X:刪除游標前的字元。
d:dw刪除游標所在字。dd:刪除游標所在行。
D:從游標開始刪除至行尾。
.:重做命令,即重複前面剛執行過的命令。
u(undo):取消剛才執行過的更改。
U(undo):把當前行恢複成編輯前的狀態,不管對此行編輯了多少次。
p:將緩衝區的內容粘貼在游標所在行的下一行。
P:將緩衝區的內容粘貼在游標所在行的上一行。
c:cw:刪除游標所在的字並進入輸入模式。cc:刪除游標所在行並進入輸入模式。
r:rx用x取代游標所在位置的字元,x表示一個字元。可用nrx替換n個字元為x。
R(replace):進入替換模式,直到“ESC”為止。
n(next):尋找字串時,尋找下一個。
N(next):尋找字串時,尋找上一個。
3.滾動螢幕
滾動螢幕的命令:
^F 向前滾動一屏
^B 向後滾動一屏
^D 向前滾動半屏
^U 向後滾動半屏
在螢幕內移動
H 移動到起始點----螢幕首行
M 移動到螢幕的中間行
L 移動到螢幕的末行
nH 移動到螢幕首行下面的第n行
nL 移動到螢幕末上上面的第n行
4.尋找和替換
- 行內搜尋。
- f命令可以進行行內搜尋。輸入fx可以找到下一個x字元。
- F命令可以在反方向進行行內搜尋,輸入Fx可以找到上一個x字元。
- t命令同樣是進行行內搜尋,但是游標停留在合格字元的前面。輸入tx使游標停留在下一個x字元的前面。
- T命令可以在反方向進行行內搜尋,但是游標停留在合格字元的下一個字元上。輸入tx使游標停留在上一個x的後面的字元上。
- %可以搜尋與之匹配的對應的()[]{}。這個功能對於書寫程式特別有用。
- 全文的搜尋。鍵入/後,游標進入VIM底部的命令列,這時就可以輸入以/為開始的/搜尋命令了。
- 最簡單的尋找。輸入/string就可以尋找string字串。
- 繼續尋找。在第一次搜尋後輸入n將會繼續進行上一次搜尋,如果輸入3n那麼會找到後面第三個符合的字串。大寫的N會在反方向,也就是向上進行搜尋。
- 向上搜尋。輸入?可以向上搜尋。隨後的n命令將會繼續向上搜尋,N向下搜尋,其他和/一樣。
- 對大小寫匹配。
- 在命令列輸入:set ignorecase可以設定搜尋以忽略大小寫方式進行。輸入:set noignorecase可以設定搜尋以匹配大小寫方式進行。預設的,將匹配大小寫。這個預設設定可以在.vimrc中修改。
- 大小寫智能匹配模式。輸入命令:set ignorecase smartcase可以設定為智能大小寫匹配模式。在這種模式下,如果你輸入的字串中至少包含一個大寫字母,那麼就會以大小寫敏感模式進行搜尋,否則以忽略大小寫入模式進行搜尋。
- 在搜尋命令中指定大小寫。在幾種大小寫搜尋模式中進行轉換總要輸入長長的一串指令,如果需要不斷地轉換模式,確實有些麻煩。所以你可以直接在搜尋命令中指定大小寫匹配模式。/c表示忽略大小寫,而/C表示對大小寫敏感。
- 尋找當前詞。一個簡單的方法可以讓你尋找下一個和當前詞一樣的詞,你不比輸入/currentword,你可以直接按下*就可以尋找下一個currentword。#可以讓你向上尋找同一個單詞。
- 調整尋找後的游標位置。
- 使用/string/3會使在游標轉到找到string字串的行下面的第3行。第1行從包含string的行算起。同樣可以使用/string/-2來使游標停留在包含string的行的前面2行。
- 使用/string/e可以使游標停留在string字串的末尾而不是預設的第一個字元位置。/string/b則表示停留在string第一個字元的位置,不過預設就是如此,我們不比多此一舉。但是/string/b+2卻可以使游標停留在string字串的第二個字元的位置,這裡是r。在e或者b的後面+或者-數字,可以進一步調整游標的位置。
- 特殊字元。在搜尋命令中, .*[]^%/?~$這10個字元有著特殊意義,所以在使用這些字元的時候要在前面加上一個反斜線/。而/e表示<esc>;/t表示<tab>;/r表示<cr>;/b表示<bs>。
- 匹配換行或空格。使用/n可以表示一個換行;而/s表示匹配空白,注意是空白不是空格。/_s表示匹配換行或者空格;/_a表示匹配換行或者一個字母。比如:/the/nword尋找以the結束並且下一行以word開始的行的位置。/the/_sword尋找the和word之間以空白或者換行分割的位置。/the/_s/+word表示the和word之間可以有多個空白。/+的含義可以在後面找到。
- 限定詞首或者詞尾。/<可以限定找到是以指定字串開始的單詞。比如//<the可以找到以the開始在字串,但是會忽略在單詞中間包含the的字串。而/>則是限定必須是以指定字串結尾的單詞。
- 行首和行尾。輸入/^string尋找以string開始的行,並且游標停留在這個string的第一個字元。輸入/string$則尋找以string結束的行,並將游標停留在這個string的第一個字元。這個模式不會忽略前置或者後置的空格。
- 匹配任何一個字元。句號.可以匹配任何一個字元。例如/t.e可以找到the或者tae或者tue。
- 更加複雜的匹配模式。實際上,/搜尋可以使用非常複雜的匹配模式。下面列出了其中一些複雜的匹配模式。
- 可重複的字元。
- 使用*表示它前面的字元可以重複多次或者0次。比如/be*可以匹配b,be,bee,beee等等。但是這也會包含b,因為e重複0後是空。如果要匹配諸如be,bebe,bebebe的字串可以使用/(和/)把他們包括起來,形如://(be/)*。
- 使用/+來限定為重複至少一次到無數次。如:/be/+可以匹配be,bee,bee等等。
- 重複0次或者一次。/=可以指定重複0次或者一次。/strings/=表示匹配string或者strings。這在尋找單詞的複數形式特別有用.
- 指定重複的次數。/{n,m}可以指定重複n到m次。比如:/be/{2,4}將會匹配bee,beee,beeee。同樣可以使用/{,4}表示匹配0到4次;/{4,}表示4次到無數次;/{4}表示重複4次。
- 匹配列表中的一個。使用一個以/|分割的列表,可以表示匹配列表中任何一項。比如/one/|two表示尋找one或者two;/one/|two/|three表示尋找one或者two或者three。
- 一個複雜的執行個體:/end/(if/|while/|for/)將會尋找endif,endwhile以及endfor。
- 字元列表。使用[0-9]可以表示一個0到9範圍的字元。比如/string[1-5]表示尋找string1,string2,string3,string4,string5。當然也可以使用[a-z]表示字元a到z中間的一個。
- 特殊的字元集合。使用/d也可以表示0到9的數字,這個選項可以代替[0-9]。/D表示非數字代替[^0-9];/x表示十六進位數代替[0-9a-fA-F];/X表示非十六進位數代替[^0-9a-fA-F];/s表示空白字元代替[ ] (<Tab> 和<Space>);/S表示非空白字元代替[^ ] (除<Tab> 和<Space>之外);/l表示小寫字母代替[a-z];/L表示非小寫字母代替[^a-z];/u表示大寫字母代替[A-Z];/U表示非大寫字母代替[^A-Z]
- 搜尋並替換。輸入:[range]s/from/to/[flags]命令可以搜尋匹配的字串並且替換為指定的字串。這是一個稍微複雜的命令。其中[range]是一個可選項,用來指定搜尋替換的範圍。[flags]也是一個可選項,用來指定搜尋替換的處理方式。所以這個命令的簡單形式是:s/from/to/。
- 搜尋替換的範圍。如果沒有指定範圍,則只在當前行進行搜尋替換。
- 在所有行進行搜尋替換。範圍符號%表示在所有行進行搜尋替換。:%s/from/to/就是在全文尋找from並替換為to。
- 在指定的行上進行搜尋替換。:1,50s/from/to/表示在第1行和第50行之間(包括1和50行)進行搜尋和替換。:45s/from/to/表示僅僅在第45行進行搜尋和替換。而"1,$"行號範圍和“%“是等價的。
- 處理方式。我現在使用的VIM預設的方式是無須確認。不過好像不同版本的預設的處理方式是不同的。
- 無須確認。方式符號g表示直接替換無須進行確認。:%s/from/to/g表示在全文中尋找from並且直接全部替換為to。
- 列印。處理方式符號p表示在替換時列出每個被改變的行。手冊中這麼說,但是實際效果卻讓我很迷惑。
- 確認後處理。處理方式符號c表示在進行替換前需要使用者進行確認。這時你可以選擇(y/n/a/q/1/^E/^Y):y表示同意當前替換;n表示不同意當前替換;a表示替換當前和後面的並且不再確認;q表示立即結束替換操作;1表示把當前的替換後結束替換操作;^E向上滾屏^Y向下滾屏,用來協助查看前後內容以決定進行操作。
5.others
~:大小寫轉換。在非編輯狀態下,將游標移至某個字元,使用~命令,那麼小寫字母會變成大寫,大寫的字母會變成小寫。