Vim中使用 < 和 > 分别表示单词的开头和结尾,例如查找单词 i 而不是字母 i ,在正常模式下,按下 / 启动搜索模式,输入 ,敲击回车即可。
成都创新互联,专注为中小企业提供官网建设、营销型网站制作、成都响应式网站建设、展示型成都网站制作、网站设计等服务,帮助中小企业通过网站体现价值、有效益。帮助企业快速建站、解决网站建设与网站营销推广问题。要查找当前光标覆盖的单词,敲击 * ,Vim会自动启动搜索模式,光标移动到该单词下一个现身位置。
搜索当前单词并连续修改假定当前光标覆盖的单词为 foo,按下 * 键,Vim 会搜索并跳转到下一个 foo 的位置,按下 ciw 组合键,意思是 change inner word ,此时 foo 会被删除,在原位置输入 bar ,然后按下 Escape 键。这就完成了一次搜索并修改,接下来按 n 键继续搜索,如果还需要修改,则按下 . 键表示重复修改动作,如此反复完成连续搜索与修改。
搜索连续重复单词有时你可能会连续重复输入同一个单词而不自知,例如以下文本:
1 hello hello
2 world world
3 thank
4 thank
搜索模式:
()\_s*1
以上搜索模式会匹配文本中的1-4行。在Vim中,使用 ( 和 ) 包括的部分视为一个原子,其中 (
使用 | 表示或逻辑,例如 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//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。
参考一
参考二
参考三