Skip to content

Vim - 搜索

搜索是任何文本编辑器中的基础操作,Vim 提供了强大的工具来高效地执行搜索。本章将介绍各种命令和设置,帮助您掌握 Vim 中的搜索。

在本章中,我们将讨论以下内容:

  • 搜索相关设置
  • 在当前文件中搜索
  • 在多个文件中搜索
  • 在 Vim 帮助文件中搜索

Vim 提供了多种设置来自定义搜索行为。您可以为当前会话临时设置这些选项,或将它们添加到您的 ~/.vimrc(Windows 上为 ~/_vimrc,Neovim 上为 ~/.config/nvim/init.vim)文件中以使其永久生效。

启用增量搜索(在您输入时显示匹配项):

:set incsearch

高亮显示所有搜索匹配项:

:set hlsearch

例如,如果启用了 hlsearch 并且您搜索 “fox”,当前缓冲区中所有 “fox” 的出现都将被高亮显示。要临时清除高亮,请使用 :nohlsearch(或 :noh)。下一次搜索时高亮将重新出现。

使搜索不区分大小写:

:set ignorecase

如果您的搜索模式包含大写字母,则智能地覆盖 ignorecase(例如,如果同时设置了 ignorecase,搜索 “Fox” 将区分大小写,而搜索 “fox” 将不区分大小写):

:set smartcase

要禁用这些设置,在设置名称前加上 “no”:

:set noincsearch
:set nohlsearch
:set noignorecase
:set nosmartcase

使用以下命令向前(朝文件末尾方向)执行搜索:

命令描述
/向前搜索 <pattern>。按 Enter 开始搜索。
n在同一方向上查找上次搜索模式的下一个匹配项。
N反转方向,查找上次搜索模式的上一个匹配项。
//重复上一次向前搜索。如果您之前使用了 ?,这会很有用。

提示:搜索模式可以是正则表达式。有关帮助,请参见 :help pattern。

使用以下命令向后(朝文件开头方向)执行搜索:

命令描述
?向后搜索 <pattern>。按 Enter 开始搜索。
n查找上次搜索模式的下一个匹配项,这意味着对于 ? 搜索而言是继续向后查找。
N反转方向,查找上次搜索模式的上一个匹配项(因此,对于 ? 搜索而言是向前查找)。
??重复上一次向后搜索。如果您之前使用了 /,这会很有用。

将光标放在任何单词上,使用以下命令进行快速搜索:

命令描述
*向前搜索光标下的整个单词。
#向后搜索光标下的整个单词。
g*向前搜索光标下的当前单词(也匹配单词的一部分)。
g#向后搜索光标下的当前单词(也匹配单词的一部分)。

Vim 内置的 :vimgrep(或 :vg)命令允许您在多个文件中搜索模式。这会将匹配项填充到 quickfix list 中。

例如,要在当前目录及其子目录中的所有 *.js 文件中搜索字符串 “MyFunction”:

:vimgrep /MyFunction/ ./**/*.js

注意 vimgrep 使用 /pattern/。. 指代当前目录,而 ** 是一个递归搜索的 glob。

运行 :vimgrep 后,quickfix list 将包含所有匹配项。使用这些命令来导航列表:

命令描述
:copen打开 quickfix 窗口以显示所有匹配项。
:cclose关闭 quickfix 窗口。
:cnext or :cn转到 quickfix list 中的下一个匹配项。
:cprevious or :cp or :cN转到 quickfix list 中的上一个匹配项。
:cfirst转到第一个匹配项。
:clast转到最后一个匹配项。

另外,许多用户集成了外部工具,如 grep、ripgrep (rg) 或 The Silver Searcher (ag),以便进行更快速的多文件搜索。这可以使用 grepprg 选项进行配置,然后使用 :grep 命令。例如,使用 ripgrep:

:set grepprg=rg\ --vimgrep\ --no-heading
:grep MyFunction ./**/*.js

导航命令(:copen、:cn 等)与 :grep 的工作方式相同。

Vim 拥有广泛的内置帮助文档。要在所有已安装的帮助文件中搜索关键字,请使用 :helpgrep(或 :helpg)。这也会填充 quickfix list(如果从帮助窗口使用,则填充 location list)。

例如,要查找所有与 “quickfix” 相关的帮助主题:

:helpgrep quickfix

然后使用 quickfix 导航命令,如 :copen、:cn、:cp 来浏览结果。每个结果都将带您到帮助文件中的相关部分。更多信息,请参见 :help :helpgrep。