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> |
Tip 81 Preview the First Match Before Execution
在执行查找前预览第一处匹配
缺省情况下, 我们在输入查找模式时, Vim 不会进行查找, 只有当我们按下
根据预览结果对查找域自动补全 (
例子:我们搜索输入 carr 就直接定位到 carrot 单词了. 假如我们需要匹配整个的 carrot 单词, 用来做替换之类的呢?
简单的方式就是手动全部敲完整个单词 carrot, 不过有快捷键可以完成此任务: <C-r><C-w>
. 此快捷键可以把当前预览匹配的词自动补全到搜索字段, 比较长的单词就很好用了。
需要注意的是
例如在使用 \v 正则模式下搜索时,
因此,只要你找的不是模式,而是单词或词组,基于增量查找的自动补全功能真地能节省一点时间。
Tip 82 统计当前模式的匹配个数
虽然没有任何方法可以让查找命令统计当前文档中的匹配个数,但是用下面这条命令就可以做到这一点
1 | ➾:%s///gn |
实际上,我们调用的是 :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
利用查找历史,迭代完成复杂的模式
写一个正则表达式并不简单. 通常都不是一次就能写对的, 所以如果能在上一次的基础上进行改进就显得很必要. 那么重新调用和编辑搜索历史就是必备的技巧 。
在查找提示符 \ 出现后,键入