zoukankan      html  css  js  c++  java
  • [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。

    参考一 

    参考二 

    参考三

  • 相关阅读:
    wireshark如何抓取本机包
    模拟post请求方法
    Spring Boot中使用RabbitMQ
    Dubbo注册中心的四种配置方式详解
    spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情
    zookeeper 大量连接断开重连原因排查
    分布式一致性协议之:Gossip(八卦)算法
    MongoDB分析工具之一:explain()语句分析工具
    MongoDB分析工具之二:MongoDB分析器Profile
    MySQL安装
  • 原文地址:https://www.cnblogs.com/ifantastic/p/3826433.html
Copyright © 2011-2022 走看看