Vim查找

查找

Tip 79 Meet the Search Command

结识查找命令

Command Effect
/ 向后搜索
? 向前搜索
n 跳转到下一个匹配位置(next match), 保持搜索方向和偏移
N 调整到上一个匹配位置, 保持搜索方向和偏移
/ 搜索模式不变, 向后跳转到下一个匹配位置
? 搜索模式不变, 向前调整到上一个匹配位置
gn 启用可视化模式, 选中下一次的匹配文本
gN 启用可视化模式, 选中上一次的匹配文本

回溯之前的查找

Vim 会一直记录我们执行过的查找模式,因此可以方便地重用它们。当查找提示

符出现时,我们可以通过 键,滚动浏览之前的查找记录。

Tip 80 Highlight Search Matches

高亮查找匹配

通过启用hlsearch选项,在配置文件中设置set hlsearch 可以高亮显示查找匹配。

禁用高亮查找功能

高亮查找有时会使得工作区内到处充斥高亮色调,Vim 提供了一种优雅的解决方案, 即通过 :nohlsearch 命令暂时关闭查找高亮功能(简写 :noh )。此命令使得高亮功能一直处于关闭状态,直到执行新的或重复的查找命令为止。

创建用于关闭高亮功能的快捷键

:noh <CR> 虽然可以禁用查找高亮功能,但我们在键盘操作上也花费了不少功夫。

通过创建映射项,可以让我们加速操作,例如:

1
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

通常用于清除并重绘显示屏(参见 :h CTRL-L )。而新的映射项,是在原有基础之上增加了暂时关闭查找高亮的功能。

Tip 81 Preview the First Match Before Execution

在执行查找前预览第一处匹配

缺省情况下, 我们在输入查找模式时, Vim 不会进行查找, 只有当我们按下 后,它才会立即展开行动。启用‘incsearch’选项,set incsearch , 会让 Vim 根据已在查找域中输入的文本,预览第一处匹配。每当我们新输入一个字符时, Vim 会即时更新预览内容。

根据预览结果对查找域自动补全 (

例子:我们搜索输入 carr 就直接定位到 carrot 单词了. 假如我们需要匹配整个的 carrot 单词, 用来做替换之类的呢?

​ 简单的方式就是手动全部敲完整个单词 carrot, 不过有快捷键可以完成此任务: <C-r><C-w>. 此快捷键可以把当前预览匹配的词自动补全到搜索字段, 比较长的单词就很好用了。

需要注意的是 自动补全比较脆弱。

例如在使用 \v 正则模式下搜索时, 将会补全光标处的整个单词 (那么 /\vcarr 将会得到 /\vcarrcarrot 结果)。

因此,只要你找的不是模式,而是单词或词组,基于增量查找的自动补全功能真地能节省一点时间。

Tip 82 统计当前模式的匹配个数

虽然没有任何方法可以让查找命令统计当前文档中的匹配个数,但是用下面这条命令就可以做到这一点

1
2
➾:%s///gn
《 117 matches on 65 lines

​ 实际上,我们调用的是 :substitute 命令,替换命令,但标志位 n 会抑制正常的替换动作。该命令不会对每处匹配进行替换,而是简单地统计匹配的次数,并将结果显示到命令

行上。

不管怎样,不要省略任何 / 字符。如果少加了一个/ ,即 :%s//gn,将致使

“gn”替换每一处匹配。

Tip 83 Offset the Cursor to the End of a Search Match

将光标偏移到查找匹配的结尾

​ 每当我们执行查找命令时,光标总会被定位于匹配的首字母上。虽然这种缺省操

作看起来比较合理,但我们可能有时更倾向于将光标定位于查找匹配的结尾。Vim 的

查找偏移功能,可以将此想法变为现实。

标志位e

加入标志位e会把光标移到匹配项结尾

例如: /vim/e

Tip 85 Create Complex Patterns by Iterating upon Search History

利用查找历史,迭代完成复杂的模式

写一个正则表达式并不简单. 通常都不是一次就能写对的, 所以如果能在上一次的基础上进行改进就显得很必要. 那么重新调用和编辑搜索历史就是必备的技巧 。

在查找提示符 \ 出现后,键入 会显示之前的搜索记录