尋找字元
命令f用於在本行內向前搜尋。例如fx是向前(Forward)搜尋字母x。而命令F是向後(Backward)搜尋。例如Fx是向後搜尋字母x。與f和F這兩個相類似的是t和T命令。t命令類似於f向前搜尋命令,所不同的是t搜尋到時並不是將游標停在目標字元上,而是停在目標字元的前一個字元上。在搜尋的過程中,我們可以使用ESC來退出搜尋而開始新的工作。
對於以上四個尋找命令,我們可以重複執行這些操作。命令;是按照前一次的尋找方向繼續尋找,如果要向相反的方向尋找可以使用,命令。但是這些尋找只是在行本行內進行,並不會將游標移動到其它的行。
尋找字串
我們可以使用/string命令來向前(Forward)尋找字串string,按下斷行符號後,游標就能跳到正確的地方。在這個命令中,/後的字元是我們想要尋找的字元,而斷行符號鍵則表明了命令的結束。
有時想要尋找的內容並不僅在一處,我們可以在整個文章中進行尋找:/可以繼續剛才的尋找操作。我們還可以使用n命令來繼續剛才的尋找命令。這兩個命令都能達到同樣的效果。
一般來說,在進行尋找時總是在向前尋找。我們也可以使用?命令向後(Backward)尋找。N也是逆向尋找命令,他可以實現立即反向尋找。
如果我們想要停止這一尋找,可以使用ctrl+C命令,如果是在Windows系統中,則要使用ctrl+Break命令。
vi具有記錄尋找命令曆史的功能,這樣就不用重複輸入尋找命令了。例如你剛才做過的三次尋找分別是:/one,/two,/three。而現在輸入/,然後按方向鍵的上或是下就看到剛才尋找的內容顯示在vi的下面,這時只要按下斷行符號就會找到想要的內容了。
指定游標置放位置
在預設情況下,尋找時Vim會將游標放在第一個匹配的結果的開始處。我們也可以指定尋找結束後,游標所處的位置。對於向前尋找的命令,我們可以在斜線後用數字來指明游標所處的位置,例如/set/2命令會在尋找結束後將游標放在第一個set字串之後第二行的開始處。命令中的數字可以是正數也可以是負數。如果僅是一個簡單的數字,游標會被放在第一個匹配字串之後或之前的數字所指定的行的開始處。正是向後,負數是向前。如果斜線後是b和數字,那麼在尋找結束後,游標將會放在第一個匹配字串的開始處,然後向左或是右移動n個字元,這裡的n即為數字所指定的數。如果為正數則是向右移動,如果是負數,則是向左移動。例如/set/b2,這個命令使游標在尋找結束後放在第一個匹配字元的開始處,然後向右移動兩個字元,也就是說最後游標會位於第一個匹配字串中的t的位置。將b改為s也是一樣的效果。而參數e會使得游標放在第一個匹配字串的結尾處。同樣我們也可以用數字來指定向右還是向左移動游標以及移動的字元數。例如/set/e命令會使游標放在第一個匹配字元處的結尾處。如果命令改為/set/e2,會將游標放在第一個匹配字串的結尾處,然後向右移動2個字元。這裡的數字如果是正數則向右移,如果為負數則向左移。
命令/set/e+2是在尋找set字串結束後,將游標放在第一個匹配字串的結尾處,然後向右移動兩個字元。在這裡我們將這個數字稱為位移量。如果要重複上一次的尋找,但是需要不同的位移量,可以用//5命令。不使用位移量時,可以指明一個空的位移量,如//命令。/命令,重複前一次的尋找,使用相同的位移量。
尋找命令?也可以實作類別似的功能。例如?set?b5命令,是將游標放在最後一個匹配字串的開頭部分,然後向右移動5個字元。??-2命令,則繼續前一次的尋找命令,但是使用新的位移量。??命令,是繼續前一次的尋找命令,但是不使用位移量。
立時尋找字串
如果我們想快速尋找當前游標下的字串,可以使用命令*,這個命令可以向前尋找與當前游標下的字元精確匹配的字串。而命令#,則向後尋找與當前游標下的字元精確匹配的字串。如果當前游標下的字串為word,在執行*命令尋找時並不會與Word相匹配。與這個立時尋找命令相類似的就是g*命令。他不會進行嚴格的匹配。如果用這個命令來尋找word,那麼就有可能和Word相匹配。而g#命令與其相同,只不過他是向相反的方向進行尋找匹配。
設定尋找選項
我們可以選擇高亮顯示尋找的文本,命令為::set hlsearch,關閉高亮顯示的命令為::set nohlsearch。如果想關掉剛才高亮顯示的結果,可以使用:nohlsearch命令。
使用:set incsearch命令,將開啟匹配尋找選項。在進行尋找時就會顯示出不斷匹配的過程。例如你想尋找的內容是include,在開啟這個選項後,當你輸入/i,游標定位在i上,再繼續輸入n游標定位在in上,如此直到查打到所要求的內容。關閉這個選項的命令為::set noincsearch。
在預設的情況下,Vim是大小寫敏感的。如果一個檔案中有這樣幾個字串:include,INCLUDE,Include。當我們使用命令/include來尋找字串時,只有include字元會被高亮顯示。但是如果我們用:set ignorecase命令開啟ignorecase選項後,所有的類似的字元都會被高亮顯示。如果這樣的尋找結果並不是我們想要的,可以使用:set
noignorecase命令關閉這個選項。
如果設定了ignorecase選項後,我們想要尋找字串word,而匹配的則可能是word、Word,WORD。如果我們要尋找字串WORD,匹配的結裡也是一樣的。但是如果設定了:set ignorecase和:set smartcase兩項後,執行結果就會變得不一樣了:如果我們輸入的是小寫字元,那麼就會匹配各種可能的組合,這時與設定了ignorecase的情況相同,但是如果我們在輸入中有一個大寫字元,那麼這時就變成了精確尋找,與設定了noignorecase的情況相同。
我們在執行尋找命令時,也可以用修飾符來控制大小寫敏感。在命令中加入修飾符/C將告訴Vim執行大小寫敏感的查詢,比如?/Cword命令就只匹配單詞word。而在命令中加入修飾符/c則執行忽略大小寫查詢。
在預設的情下,我們輸入要尋找的字串,vim是從當前游標處向前尋找,直到檔案的結尾,如果沒有找到,那麼就會從檔案的開頭開始尋找,直到游標所處的位置。我們可以通過:set nowrapscan命令,來禁止這種迴圈尋找的方式,這樣如果已經尋找到檔案的底部時,就會在底部顯示出一條錯誤資訊。如果我們想要回到正常的狀態,可以使用:set wrapscan命令。
f |
向前搜尋並將游標停留在目標字元上 |
F |
向後搜尋並將游標停留在目標字元上 |
; |
重複剛才的尋找 |
, |
反向重複剛才的尋找 |
t |
向前搜尋並將游標停留在目標字元的前一個字元上 |
T |
向後搜尋並將游標停留在目標字元的後一個字元上 |
/ |
向前尋找 |
? |
向後尋找 |
n |
繼續尋找 |
N |
反向尋找 |
* |
向前尋找與當前游標下字元精確匹配的字串 |
# |
向後尋找與當前游標下字元精確匹配的字串 |
:set hlsearch |
開啟高亮顯示尋找的文本 |
:set nohlsearch |
關閉高亮顯示尋找的文本 |
:nohlsearch |
關閉當前高亮顯示的結果 |
:set incsearch |
開啟顯示尋找匹配過程 |
:set noincsearch |
關閉顯示尋找匹配過程 |
:set ignorecase |
忽略大小寫 |
:set noignorecase |
精確匹配大小寫 |
:set nowrapscan |
禁止迴圈尋找方式 |
:set wrapscan |
啟用迴圈尋找方式 |