Vim搜索命令使用方法和技巧-Vim入門教程(9)

原文地址:https://vimjc.com/vim-search.html。感謝原作者

介紹Vim搜索命令/ 、 ? 、* 和 #,以及Vim正向搜索和反向搜索,Vim正則表達式搜索特定字符和特定行。

一、Vim基本搜索命令

在Vim命令模式下,輸入 /  ? 符號就進入了搜索模式,/ 用於正向往下搜索,? 用於反向往上搜索。

在搜索模式下可以對Vim打開的整個文本內容進行搜索,當按下 n 時可以繼續正向查找下一個相匹配的目前單詞。N 的作用與 n 相反,是往上反向搜索目標單詞。

在Vim命令模式下,如果要搜索當前光標下的單詞,除了可以使用/ 和 ?外,還可以使用特殊命令* 和 #

假設光標當前所有單詞爲the,那麼在當前光標位置執行命令 * 相當於搜索命令 /\<the\>,命令 # 等同於命令 ?\<the\>\< 是一個單詞定界符,表示只匹配單詞的開頭,\> 也是單詞定界符,表示只匹配單詞末尾。關於單詞定界符的更多內容,可以閱讀Vim搜索字符轉義與very magic搜索模式

大家可仔細觀看下圖的Vim動畫教程示意

注意:搜索一些特殊的字符,例如:*[]^%/?~$等,需要在它們的前面加上轉義符號\

二、Vim高亮搜索

爲了在Vim中高亮顯示被搜索的字符,可以使用命令 set hlsearch,可以在Vim命令行模式執行命令或者在配置文件 .vimrc 中進行永久設置。

如果需要清除最近一次的屏幕搜索高亮結果,可以在Vim命令行模式使用命令 :nohlsearch 或其縮寫形式 :noh。更多介紹,可參考文章Vim清除上次的搜索高亮結果-Vim使用技巧(1)

三、搜索大小寫敏感

默認Vim搜索命令是大小寫敏感的,因此,搜索 the 不會查找到 The。使用命令 :set ignorecase 會使得Vim搜索變得不區分大小寫。

  • 不管 ignorecase 選項的值是什麼,都可以在搜索命令中使用 \c 來強制使得當前搜索模式不區分大小寫,而命令 \C 則會強制當前搜索模式大小寫敏感。

因此,/the\c 既會查找 the,也會查找到 The

如果打開了 ignorecase 選項,那麼你也應該設置 :set smartcase

  • 當 ignorecase 和 smartcase 選項均打開時,只要你的搜索模式中包含大寫字母,那Vim會認爲你當前的搜索是區分大小寫的,如果搜索模式中不包含任何大寫字母,Vim則會認爲搜索應該不區分大小寫。這是個比較”智能的”推測你搜索意圖的機制。

例如,在打開上述兩個選項的條件下,/The 只會查找到 The,而 /the 既會查找 the,也會查找到 The等。

注意smartcase 選項只對你手工輸入的搜索模式有效,對於 *# 或 gd 等是不起作用的。

四、Vim搜索進階

  • 如果想搜索當前光標所在位置的單詞,可以先輸入 / 進入搜索模式,然後依次輸入命令 <Ctrl-r><Ctrl-w> 來複制光標下的單詞並將其插入命令行中。

  • 如果想插入光標下的字串,可以使用命令 <Ctrl-r><Ctrl-a>。關於Vim單詞和字串的概念,可以參考文章Vim單詞、字串概念

  • 完成搜索後,使用 Ctrl-o 會跳轉到開始進行搜索的位置,然後使用命令 Ctrl-i 將會往前跳轉。

  • 進行過Vim搜索後,當 /?:s:g 命令使用空的搜索模式時會沿用最近一次的搜索模式。所以,在搜索完某個單詞後,使用Vim替換命令 :%s//new/g 會將之前搜索的單詞全部替換爲 new。具體可參考Vim替換命令substitute重用上次的查找模式

  • 在搜索命令前還可以增加一個整數,用於表示搜索目標出現的位置。例如,3/pattern 將會搜索模式 pattern 第三次出現的位置,而 3* 會搜索當前光標所在位置單詞第三次出現的位置。

  • 搜索還可以包含一個相對於光標的偏移量,關於搜索偏移量的更多內容,可以參考文章Vim搜索偏移介紹。

 

 

五、Vim正則表達式搜索

爲了更好的進行搜索,Vim支持正則表達式,最基本的正則表達式規則包括:

^         表示一行的開頭
$         表示一行的結尾
.         表示任意一個字符
*         匹配0次或n次

5.1 查找在行首的特定字符


上圖中用^來匹配行首

5.2 查找在行尾的特定字符


上圖中用$來匹配行尾

5.3 匹配特定行(行首匹配)


上圖中使用了/^test.*$,其中^表示匹配行首、.*表示匹配任意字符、$表示匹配行尾,合起來表示搜索任意以test開頭的行。

關於Vim正則表達式搜索的更多內容,推薦閱讀Vim搜索字符轉義與very magic搜索模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章