[Vim] 搜索模式(正则表达式)

本文介绍如何使用Vim的搜索模式。

搜索单词

Vim中使用 < 和 > 分别表示单词的开头和结尾,例如查找单词 i 而不是字母 i ,在正常模式下,按下 / 启动搜索模式,输入 <i> ,敲击回车即可。

要查找当前光标覆盖的单词,敲击 * ,Vim会自动启动搜索模式,光标移动到该单词下一个现身位置。

搜索当前单词并连续修改

假定当前光标覆盖的单词为 foo,按下 * 键,Vim 会搜索并跳转到下一个 foo 的位置,按下 ciw 组合键,意思是 change inner word ,此时 foo 会被删除,在原位置输入 bar ,然后按下 Escape 键。这就完成了一次搜索并修改,接下来按 n 键继续搜索,如果还需要修改,则按下 . 键表示重复修改动作,如此反复完成连续搜索与修改。

搜索连续重复单词

有时你可能会连续重复输入同一个单词而不自知,例如以下文本:

1 hello hello
2 world  world
3 thank
4 thank

搜索模式:

(<w+>)\_s*1

以上搜索模式会匹配文本中的1-4行。在Vim中,使用 ( 和 ) 包括的部分视为一个原子,其中 (<w+>) 匹配一个单词原子,s 匹配空格符和tab符, \_s 匹配空格符、tab符和换行符, \_s* 匹配0次或多次。

搜索A或B

使用 | 表示或逻辑,例如 red|green|blue 匹配字符串(注意不是单词)red或green或blue。

如果要将匹配的对象替换成新的字符串,可以使用 :%s/搜索正则/新字符串/g,例如将所有的red或green字符串替换为purple:

:%s/red|green/purple/g

替换所有单词red或green为单词purple:

:%s/<(red|green)>/purple/g

Vim具有搜索模式记忆,因此以上命令也可以拆解为两步:

第一步:搜索单词red或green:

/<(red|green)>

第二步:将搜索结果替换为purple:

:%s//purple/g

替换命令中搜索正则为空时,Vim会直接使用最后一次使用过的搜索正则作为默认表达式。

有时我们并不想替换结果,而是想要对结果做一些装点,那么可以使用 & 来引用搜索结果,例如以下示例会将文本中所有的单词red或green添加上引号:

:%s/<(red|green)>/"&"/g

或者使用分组 1, 2, 3 ... 来引用搜索结果:

:%s/<(red|green)>/"1"/g
  • 搜索与替换

  :substitute 命令搜索一个字符串并将其替换为新字符串,以下为一些基本使用方法。

:%s/foo/bar/g
    全文搜索每个foo并替换为bar。

:s/foo/bar/g
    当前行搜索每个foo并替换为bar。

:%s/foo/bar/gc
    全文搜索每个foo并替换为bar,替换前需要确认。

:%s/<foo>/bar/gc
    全文搜索每个单词foo并替换为bar,替换前需要确认。

:%s/foo/bar/gci
    全文搜索每个foo并替换为bar,替换前需要确认,大小写不敏感。

:%s/foo/bar/gcI
    全文搜索每个foo并替换为bar,替换前需要确认,大小写敏感。

标记g:表示全局搜索,对每一个匹配结果进行操作,缺省标记g,则只对第一个匹配结果进行操作。
标记c:表示操作前需要进行确认。
标记i:表示大小写不敏感。
标记I:表示大小写敏感。
  • 搜索分组

  使用 ( 和 ) 包围住表达式使其成为一个原子,并根据原子所处位置顺序使用1,2,……来引用相应的匹配结果。最常见的场景莫过于对调字符串位置,例如:

原文:
1. France VS Germany
命令: :s/(France)(sVSs)(Germany)/
321
结果: 1. Germany VS France

搜索A与B

使用 & 表示与逻辑,例如搜索同时包含了 red 和 blue 的行。进行与逻辑搜索时,Vim按照由 & 分隔的表达式顺序逐一匹配,因此如果开启了高亮匹配结果的功能,那么你看到高亮匹配的永远都是最后一个表达式的匹配结果。

/.*red&.*blue

反向肯定预查搜索

使用 (expression1)@<=expression2 表示反向肯定预查搜索模式,其过程为首先搜索 @<= 右侧的原子即 expression2,遇到匹配项后再检查匹配结果左侧是否满足 expression1。例如以下命令会搜索多个冗余0的数字。

原文:
1.0 1.000 1.0100

命令:
(.d+)@<=0+>

结果:
匹配了1.000后两个0,1.0100后两个0。

参考一 

参考二 

参考三

原文地址:https://www.cnblogs.com/ifantastic/p/3826433.html