Vim 及其前身 Vi 已预装在 macOS 和大多数 Linux 发行版中。在处理远程服务器或精简系统时,Vim 通常是唯一可用的编辑器。
搜索文本是编辑文件时的最常见任务之一,掌握 Vim 的搜索命令在您首选编辑器不可用时将非常有用。
本指南解释了如何使用正向和反向搜索、全词匹配、搜索历史以及区分大小写或不区分大小写的模式在 Vim / Vi 中进行搜索。
Vim 模式
您必须处于正常模式才能在 Vim 中进行搜索。这是打开编辑器时的默认模式。如果您处于其他模式(插入或可视),请按 Esc 返回正常模式。
Vim 中的基本搜索
Vim 允许您使用两个主要命令来搜索文本:
/(正斜杠) - 正向搜索。?(问号) - 反向搜索。
执行搜索的步骤如下:
- 按
/进行正向搜索或按?进行反向搜索。 - 输入搜索模式。
- 按
Enter运行搜索。

Vim 将光标移动到它找到的第一个匹配项。
Searches 将模式作为子字符串进行匹配,而不是整个单词。搜索“gnu”也会匹配较大单词(如“cygnus”或“magnum”)中的出现。
导航搜索结果:
- 按小写
n搜索下一个出现。 - 按大写
N向相反方向搜索。
搜索整个单词
要仅匹配整个单词,请添加单词边界:
\<标记单词的开始。\>标记单词的结束。
例如,要仅搜索“gnu”作为独立单词,您将使用 /\<gnu\>:

搜索当前单词
Vim 提供了快速捷径来搜索当前单词(光标下方的单词)。
将光标放在一个单词上并:
- 按
*(星号) 正向搜索全词匹配。 - 按
#(井号) 反向搜索。
再次按 * 或 # 以查找下一个匹配项。
使用 Vim 搜索历史
Vim 会跟踪当前会话期间执行的所有搜索操作。要访问搜索历史:
- 按
/或?。 - 使用上/下箭头键浏览之前的搜索。
- 按
Enter运行搜索。您可以在执行操作之前编辑模式。
搜索高亮
在 Vim 的默认配置中,搜索会将光标移动到当前匹配项,而不会高亮文件中的每个匹配项。您可以使用 hlsearch 选项来控制持久性搜索高亮。
要为当前会话启用搜索高亮,请运行:
vi
:set hlsearch要清除当前高亮而不禁用设置,请使用 :nohlsearch 命令(或其缩写 :noh):
vi
:noh要为当前会话完全关闭搜索高亮:
vi
:set nohlsearch要使任一设置永久生效,请将其添加到您的 ~/.vimrc 文件:
~/.vimrcvim
set hlsearch大小写敏感性
默认情况下,Vim 搜索是区分大小写的;搜索“GNU”不会匹配“Gnu”。
每次搜索覆盖大小写敏感性
要忽略一次搜索的大小写,请在搜索模式后追加 \c:
vi
/Linux\c要强制区分大小写,请在模式后追加大写 \C:
vi
/Linux\c为当前会话覆盖大小写敏感性
要使当前会话的搜索不区分大小写,请在 Vim 命令行中输入 :set ignorecase 或 :set ic。
要返回到大小写匹配模式,请键入 :set noignorecase 或 :set noic。
智能大小写
smartcase 选项是 ignorecase 的有用补充。当两者都启用时,如果模式全是小写,Vim 将忽略大小写,但一旦您键入任何大写字母,就会切换到区分大小写的匹配。
vi
:set ignorecase:set smartcase使用这种组合,/linux 匹配“Linux”、“LINUX”和“linux”,而 /Linux 仅匹配“Linux”。
永久覆盖大小写敏感性
要将忽略大小写和智能大小写设置为默认选项,请将其添加到您的 ~/.vimrc 文件:
~/.vimrcvim
set ignorecase
set smartcase快速参考
对于可打印的快速参考,请参阅 Vim 速查表。
| 命令 | 描述 |
|---|---|
/pattern | 正向搜索模式 |
?pattern | 反向搜索模式 |
n | 跳转到下一个匹配项 |
N | 跳转到上一个匹配项 |
* | 正向搜索光标下方的单词 |
# | 反向搜索光标下方的单词 |
/\<word\> | 仅搜索整个单词 |
/pattern\c | 不区分大小写的搜索(一次性) |
/pattern\C | 区分大小写的搜索(一次性) |
:set ignorecase | 忽略所有搜索的大小写 |
:set ignorecase smartcase | 除非模式包含大写字母,否则忽略大小写 |
:set hlsearch | 高亮所有匹配项 |
:noh | 清除当前搜索高亮 |
故障排除
搜索高亮未清除
在正常模式下键入 :noh 以清除当前搜索的高亮,而无需禁用 hlsearch。如果您想永久关闭高亮,请将 set nohlsearch 添加到 ~/.vimrc。
搜索意外匹配单词的一部分
默认情况下,Vim 搜索子字符串。使用单词边界来限制匹配:/\<word\> 仅匹配确切单词,而不是较大单词内的出现。
区分大小写的搜索未按预期工作
检查是否已设置 ignorecase(使用 :set ignorecase?)。如果已启用且您需要区分大小写的搜索,请向模式追加 \C 或运行 :set noignorecase 以在会话中禁用它。
搜索意外环绕文件
Vim 默认会环绕文件末尾。要禁用环绕,请运行 :set nowrapscan。
常见问题解答
如何在 Vim 中搜索单词?
在正常模式下按 /,输入单词,然后按 Enter。使用 n 跳转到下一个匹配项,使用 N 返回。要直接搜索光标下方的单词,请按 *。
如何在 Vim 中搜索下一个匹配项?
按 n 移动到与当前搜索相同方向的下一个匹配项,按 N 向相反方向移动。
如何在 Vim 中进行不区分大小写的搜索?
向搜索模式追加 \c(例如 /linux\c)以忽略该一次搜索的大小写。要忽略会话中所有搜索的大小写,请运行 :set ignorecase。将其添加到 ~/.vimrc 使其永久生效。
Vim 中的 / 和 ? 有什么区别?/ 从光标位置向文件末尾正向搜索。? 向文件开头反向搜索。两者默认都会环绕文件。
如何在 Vim 中关闭搜索高亮?
运行 :noh 以清除当前高亮。要完全禁用高亮,请运行 :set nohlsearch 或将 set nohlsearch 添加到您的 ~/.vimrc。
我可以使用正则表达式在 Vim 中搜索吗?
是的。Vim 支持搜索模式中的正则表达式。例如,/^foo 匹配以“foo”开头的行,而 /foo.*bar 匹配“foo”后跟任何内容,然后是“bar”。完整参考请参阅 Vim 查找和替换指南,其中详细介绍了正则表达式模式。