VIM 查找文本

VIM 查找文本

 

查找字符

命令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 啓用循環查找方式
發佈了13 篇原創文章 · 獲贊 3 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章