VIM 搜索命令使用方法和技巧

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

一、Vim 基本搜索命令#

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

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

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

假设光标当前所有单词为 the,那么在当前光标位置执行命令 * 相当于搜索命令 /\<the\>,命令 # 等同于命令 ?\<the\>\< 是一个单词定界符,表示只匹配单词的开头,\> 也是单词定界符,表示只匹配单词末尾。关于单词定界符的更多内容,可以阅读 Vim 搜索字符转义与 very magic 搜索模式

大家可仔细观看下图的 Vim 动画教程示意
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

  • ignorecasesmartcase 选项均打开时,只要你的搜索模式中包含大写字母,那 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 正则表达式搜索#

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

^         表示一行的开头
$         表示一行的结尾
.         表示任意一个字符
*         匹配 0 次或 n 次

5.1 查找在行首的特定字符#

Vim正则表达式搜索
上图中用 ^ 来匹配行首

5.2 查找在行尾的特定字符#

Vim正则表达式搜索
上图中用 $ 来匹配行尾

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

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

关于 Vim 正则表达式搜索的更多内容,推荐阅读 Vim 搜索字符转义与 very magic 搜索模式

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 2

通过 markdown 发布的格式是不是有点问题呢,感觉空行比较多~

5年前 评论
TigerLin

:thumbsup:每次修改 php.info 我都傻傻的按住 down 键 一点一点的看 get 到了

5年前 评论
vimtutor (楼主) 5年前