vim 搜索模式 2019-05-24 默认分类 暂无评论 723 次阅读 本文介绍如何使用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\)\(\sVS\s\)\(Germany\)/\3\2\1 结果: 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。 [参考一](http://vimregex.com/#backreferences) [参考二](http://vim.wikia.com/wiki/Search_and_replace) [参考三](http://vim.wikia.com/wiki/VimTip188) 文章目录 **搜索单词** 搜索当前单词并连续修改 搜索连续重复单词 搜索A或B 搜索A与B 反向肯定预查搜索 标签: vim 转载请注明文章来源 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭