標籤:

VIM學習筆記 查找文本

查找字元

命令f用於在本行內向前搜索。例如fx是向前(Forward)搜索字母x。而命令F是向後(Backward)搜索。例如Fx是向後搜索字母x。與f和F這兩個相類似的是t和T命令。t命令類似於f向前搜索命令,所不同的是t搜索到時並不是將游標停在目標字元上,而是停在目標字元的前一個字元上。而T命令類似於F向後搜索命令,所不同的是T搜索到時並不是將游標停在目標字元上,而是停在目標字元的後一個字元上。

在搜索的過程中,我們可以使用ESC鍵來退出搜索並返回到常規模式。

對於以上四個查找命令,我們可以重複執行這些操作。命令;是按照前一次的查找方向繼續查找,如果要向相反的方向查找可以使用,命令。但是這些查找只是在行本行內進行,並不會將游標移動到其它的行。

查找字元串

使用/string命令,可以向前(Forward)查找字元串string,按下回車後,游標就能跳轉到匹配處。如果在整個文件中有多處匹配的內容,那麼可以使用/命令,然後按下回車鍵繼續剛才的查找。我們還可以使用n命令來繼續剛才的查找命令。這兩個命令都能達到同樣的效果。

我們也可以使用?string命令向後(Backward)查找。N也是逆向查找命令,他可以實現立即反向查找。

如果我們想要停止這一查找,可以使用ctrl+C命令,如果是在Windows系統中,則要使用ctrl+Break命令。

Vim具有自動記錄查找命令歷史的功能,這樣就不用重複輸入查找命令了。例如你剛才做過的三次查找分別是:/one,/two,/three。而現在輸入/,然後按上下方向鍵,就可以在屏幕底部看到剛才查找命令,這時只要按下回車就能夠再次執行之前的查找命令了。

指定游標放置位置

在默認情況下,Vim會將游標放在第一個匹配結果的開始處。例如你查找字元串set,游標將會停留在字母s之上。我們可以在命令中指定查找結束後游標停留的位置。

對於向前查找的命令,可以在斜線後用數字來指明游標所處的位置,例如/set/2或/set/+2命令都會在查找結束後將游標放在第一個set字元串之後第二行的開始處。命令中的數字可以是正數也可以是負數。如果僅是一個簡單的數字,游標會被放在第一個匹配字元串之後或之前的數字所指定的行的開始處。正數表示是向後,而負數表示是向前。

參數b(begin)或s(start)會使得游標放在第一個匹配字元串的開頭處。如果斜線後是b和數字,那麼在查找結束後,游標將會放在第一個匹配字元串的開始處,然後向左或是右移動n個字元,這裡的n即為數字所指定的數。如果為正數則是向右移動,如果是負數則是向左移動。例如/set/b2或/set/s+2命令,將使游標在查找結束後放在第一個匹配字元的開始處,然後向右移動兩個字元,也就是說最後游標會位於第一個匹配字元串中的t的位置。將b改為s也是一樣的效果。

而參數e會使得游標放在第一個匹配字元串的結尾處。同樣我們也可以用數字來指定向右還是向左移動游標以及移動的字元數。例如/set/e命令會使游標放在第一個匹配字元處的結尾處。如果命令改為/set/e2,會將游標放在第一個匹配字元串的結尾處,然後向右移動2個字元。這裡的數字如果是正數則向右移,如果為負數則向左移。

我們還可以在命令中指定偏移量。例如命令/set/e+2是在查找set字元串結束後,將游標放在第一個匹配字元串的結尾處,然後向右移動兩個字元。/命令,將使用相同的偏移量重複前一次的查找。如果要重複前一次的查找,但是需要不同的偏移量,那麼可以使用//5命令。如果不使用偏移量,則可以指明一個空的偏移量,如//命令。

查找命令?也可以實現類似的功能。例如?set?b5命令,是將游標放在最後一個匹配字元串的開頭部分,然後向右移動5個字元。??-2命令,則繼續前一次的查找命令,但是使用新的偏移量。??命令,是繼續前一次的查找命令,但是不使用偏移量。

立時查找字元串

如果我們想快速查找當前游標下的字元串,可以使用命令*,這個命令可以向前查找與當前游標下的字元精確匹配的字元串。而命令#,則向後查找與當前游標下的字元串精確匹配的結果。

如果當前游標下的字元串為word,在執行*命令查找時並不會與Word相匹配。如果使用相類似的g*命令,來查找word,則不會要求嚴格的精確匹配,那麼就有可能和Word相匹配。而g#命令與其相同,只不過他是向相反的方向進行查找匹配。

大小寫敏感

在默認情況下,Vim是大小寫敏感的。如果文件中包含有include,INCLUDE,Include等多個字元串。當我們使用命令/include來查找時,則只有include字元會被高亮顯示。但是如果我們使用:set ignorecase命令,設置為忽略大小寫,則include,INCLUDE,Include所有字元串都會被高亮顯示。當然我們也可以使用:set noignorecase命令,重新設置為大小寫敏感。

在設置了ignorecase選項後,我們查找字元串word,則會同時匹配word、Word,WORD等;如果我們查找字元串WORD,匹配的結里也是一樣的。但是如果設置了:set ignorecase和:set smartcase兩項之後,就會執行不同的匹配模式:如果輸入的是小寫字元,那麼就會匹配各種可能的組合,與ignorecase選項的情況相同;但是如果在輸入中有一個大寫字元,那麼這時就會轉變為精確查找,與noignorecase選項的情況相同。

我們也可以在執行查找命令時,使用修飾符來控制大小寫敏感。在命令中加入修飾符C將執行大小寫敏感的查找,比如?Cword命令就只匹配單詞word。而在命令中加入修飾符c則執行忽略大小寫的查找。

設置查找選項

我們可以使用:set hlsearch命令設置高亮顯示查找的文本,而:set nohlsearch命令則會關閉高亮顯示。

如果想要立刻清除上次查找產生的高亮顯示,可以使用:nohlsearch命令。

使用:set incsearch命令,將打開自動匹配選項。在進行查找時就會顯示出不斷匹配的過程。例如你想查找的內容是include,在打開這個選項後,當你輸入/i,游標定位在i上,再繼續輸入n游標定位在in上,以此類推自動顯示匹配的結果。我們也可以使用:set noincsearch命令,來關閉自動匹配選項。

在默認情下,輸入查找的字元串之後,vim是從當前游標處向前查找,直到文件的結尾;如果沒有找到,則會從文件的開頭開始查找,直到游標所處的位置。通過:set nowrapscan命令,可以禁止這種循環查找的方式。如果已經查找到文件的結尾仍未發現匹配結果時,就會在底部顯示出一條錯誤信息。如果想要重新啟用循環查找方式,可以使用:set wrapscan命令進行設置。


推薦閱讀:

vim 中文輸入解決方案
Vim 文本操作總結備忘
如何將 Vim 剪貼板裡面的東西粘貼到 Vim 之外的地方?
如何在 Linux 上使用 Vundle 管理 Vim 插件

TAG:Vim |