VIM 搜索命令使用方法和技巧
介绍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搜索模式。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: