厚书读薄丨《Vim实用技巧》第五部分 模式

本文详细介绍了Vim中的模式概念,包括按模式匹配、原义匹配,以及查找、替换和全局命令的高级用法。讨论了大小写敏感性设置,以及在搜索模式与正则模式之间的转换。重点讲解了圆括号的使用,如捕获子匹配、分组功能和零宽度元字符。此外,还涵盖了查找高亮、查找历史、替换命令的细节,如替换域中的特殊字符、substitute命令的标志位,以及如何在多个文件中执行查找与替换。最后,探讨了`global`命令的使用,展示了如何在匹配行上执行Ex命令。
摘要由CSDN通过智能技术生成

第五部分 模式


第 12 章 按模式匹配及按原义匹配

  1. 调整查找模式的大小写敏感性

    ① 全局调整

    • ignorecase选项打开后,Vim的查找模式将不区分大小写

      • 副作用:影响Vim关键字自动补全的行为。
    • smartcase选项打开后,只要输入一个大写字母,查找方式就会变成区分大小写的,换言之,全是小写字母的模式表示忽略大小写

    • ignorecasesmartcase同时启用时,smartcase占主动,即Foo会匹配不了foo

    ② 局部强制调整

    • 每次查找时,可以通过在任意位置加入\c元字符表示忽略大小写,\C元字符表示区分大小写
    • 会覆盖全局调整
  2. 原义搜索 & 正则查找

    magic 搜索模式 & very magic搜索模式

    body {
          color: #3c3c3c; }
    a  {
          color: #0000EE; }
    strong {
          color: #000; }
    
    • 示例:要搜索上面代码中的颜色代码
      • magic搜索模式:/#\([0-9a-fA-F]\{6}\|[0-9a-fA-F]\{3}\)
        • 方括号缺省具有特殊含义,因此不用转义。
        • 圆括号会按原义匹配字符(),因此需要转义,且无论开闭括号都必须转义,使其具有特殊含义。
        • 花括号也一样需要转义,不过,我们只需为开括号转义,而与之对应的闭括号则不用,因为Vim会推测我们的意图。
      • very magic搜索模式:/\v#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})
        • 使用\v 模式开关将会激活very magic搜索模式,即假定除_字母以及数字外的所有字符都具有特殊含义,所以各种括号不用再转义
        • 用十六进制字符类进一步优化:/\v#(\x{6}|\x{3}),其中\x = [0-9a-fA-F]
        • #是个特例啊,他虽然不属于[_a-zA-Z0-9],但是它不具有特殊含义,因此时按照原义进行匹配的

    nomagic 搜索模式

    • nomagic模式下和magic模式基本一致,只是符号 ^$代表开头和结尾
    • 我们可以通过 \m\M开关,来分别使能magicnomagic这两种语法

    very nomagic 搜索模式

    • 即原义搜索,使用\V开启,开启后其后的模式只有反斜杠有特殊的意义,其他的都会按照原义匹配,最为直观

    ③ 四种模式之间的关系

    • Vim 缺省使用 magic 搜索模式,magic模式的设计初衷,是想能更容易地构造简单的正则表达式,它会自动为某些额外的符号赋予特殊含义,例如:.(匹配任意一个字符)、*(前面的字符可以出现0到多次)以及[]。但它却没能为诸如 +()以及{}等符号赋予特殊含义,这些符号还必须经过转义才具有特殊含义。
    • very magic 搜索模式弥补了magic搜索模式的不足,除了 [_a-zA-Z0-9]外,它为所有符号都赋予了特殊含义。这样一来,既好记又恰好与Perl正则表达式的规则保持一致,因此可以认为这是个正则表达式模式
    • nomagic 模式用于模拟 vi 的行为,只是为^$赋予了开头和结尾的特殊含义
    • very nomagic 模式是最直观的方式,除了\其他符号都没有特殊含义,都直接匹配原文
    • 作为通用法则,vim默认是需要打很多转义符号的 magic 模式;如果想按正则表达式查找,就用模式开关 \v —— very magic 搜索模式;而如果你想按原义查找文本,就使用very nomagic模式;需要用到开头和结尾匹配的时候就用\M —— nomagic搜索模式,只不过此模式下还是需要特别多的转义
  3. 圆括号

    ① 使用圆括号捕获子匹配

    • 当我们指定一个模式时,可以捕获其子匹配,并在其他地方引用它们。此功能与substitute命令组合起来尤为好用,但它也可用于定义某一类模式,这类模式的特点是重复包含某个单词。

    • /\v<(\w+)\_s+\1> 专门用来匹配重复单词

      • ⭐️ 任何圆括号内部的匹配文本都会被自动保存到一个临时的仓库。可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值