介绍Vim搜索命令/?*#,以及Vim正向搜索和反向搜索,Vim正则表达式搜索特定字符和特定行。

1.Vim基本搜索命令

在Vim命令模式下,输入 /? 符号就进入了搜索模式,/ 用于正向往下搜索,? 用于反向往上搜索。

在搜索模式下可以对Vim打开的整个文本内容进行搜索,当按下 n 时可以继续正向查找下一个相匹配的目前单词。N 的作用与 n 相反,是往上反向搜索目标单词。

在Vim命令模式下,如果要搜索当前光标下的单词,除了可以使用/?外,还可以使用特殊命令*#

假设光标当前所有单词为the,那么在当前光标位置执行命令 * 相当于搜索命令 /\<the\>,命令 # 等同于命令?\<the\>\< 是一个单词定界符,表示只匹配单词的开头,\> 也是单词定界符,表示只匹配单词末尾。

大家可仔细观看下图的Vim动画教程示意

ssl

注意: 搜索一些特殊的字符,例如:*[、]^%/?~、$等,需要在它们的前面加上转义符号\。

2.Vim高亮搜索

为了在Vim中高亮显示被搜索的字符,可以使用命令 set hlsearch,可以在Vim命令行模式执行命令或者在配置文件 .vimrc 中进行永久设置。

3.清除上次的高亮搜索

Vim尾行模式下使用 :noh:nohlsearch 来关闭当前的高亮结果,但是在下次进行Vim搜索时仍然会有高亮显示效果

为了方便,可以使用Vim教程网介绍的Vim快捷键来简化操作。

定义在vim命令模式(normal)下非递归键盘映射: nnoremap <esc> :noh<return><esc> 来关闭当前高亮搜索结果

这样,在Vim搜索结束后可以按下快捷键 Esc 来清除上次的搜索高亮效果。

ssl

注意:上面的动态Vim教程结尾处是直接按下 Esc 键来取消高亮的

4.搜索大小写敏感

默认Vim搜索命令是大小写敏感的,因此,搜索 the 不会查找到 The。使用命令 :set ignorecase 会使得Vim搜索变得不区分大小写。

不管 ignorecase 选项的值是什么,都可以在搜索命令中使用 \c 来强制使得当前搜索模式不区分大小写,而命令 \C 则会强制当前搜索模式大小写敏感。

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

如果打开了 ignorecase 选项,那么你也应该设置 :set smartcase

ignorecasesmartcase 选项均打开时,只要你的搜索模式中包含大写字母,那Vim会认为你当前的搜索是区分大小写的,如果搜索模式中不包含任何大写字母,Vim则会认为搜索应该不区分大小写。这是个比较”智能的”推测你搜索意图的机制。

例如,在打开上述两个选项的条件下,/The 只会查找到 The,而 /the 既会查找 the,也会查找到 The等。

注意smartcase 选项只对你手工输入的搜索模式有效,对于 *#gd 等是不起作用的。

5.Vim搜索进阶

如果想搜索当前光标所在位置的单词,可以先输入 / 进入搜索模式,然后依次输入命令<Ctrl-r><Ctrl-w> 来复制光标下的单词并将其插入命令行中。

如果想插入光标下的字串,可以使用命令 <Ctrl-r><Ctrl-a>

完成搜索后,使用 Ctrl-o 会跳转到开始进行搜索的位置,然后使用命令 Ctrl-i 将会往前跳转。

进行过Vim搜索后,当 /?:s:g 命令使用空的搜索模式时会沿用最近一次的搜索模式。所以,在搜索完某个单词后,使用Vim替换命令 :%s//new/g 会将之前搜索的单词全部替换为 new。

在搜索命令前还可以增加一个整数,用于表示搜索目标出现的位置。例如,3/pattern 将会搜索模式 pattern 第三次出现的位置,而 3* 会搜索当前光标所在位置单词第三次出现的位置。

搜索还可以包含一个相对于光标的偏移量

ssl

6.Vim正则表达式搜索

为了更好的进行搜索,Vim支持正则表达式,最基本的正则表达式规则包括:

查找在行首的特定字符

ssl

上图中用^来匹配行首

查找在行尾的特定字符

ssl

上图中用$来匹配行尾

匹配特定行(行首匹配)

ssl

上图中使用了/^test.$,其中^表示匹配行首、.表示匹配任意字符、$表示匹配行尾,合起来表示搜索任意以test开头的行

vim 技巧

vim 技巧(1) vim 入门教程(2) vim 三种操作模式(3) vim 光标移动(4) vim ctrl+s卡死(5) vim 重复操作命令(6) vim 多行操作(7) vim 配色方案整理(8) vim 安装插件管理器(9) vim 内容搜索(10) vim 替换命令(11) vim 自动补齐(12) vim 升级8.x版本(13)