[Github地址] (https://github.com/overmind1980/oeasyvim)

[Gitee地址] (overmind1980/oeasyvim)

[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 Vim_Linux - 蓝桥云课)

查找细节

回忆上节课内容

  • 进行了模式匹配批量替换的的操作
  • 替换单词

    • :%s/\<a.*d\>/oeasy/g
  • 转义字符

    • %s/^\/\/.*$/d
  • 删除空行

    • :g/^\s*$//d
  • 还有替换还有一些什么玩法吗?

markdown变html

  • 要把 markdown 文件中的 *斜体*
  • 变成 html 中的 <em>斜体</em>
  • 先写框架

    • s///gc
    • 修改基本框架
    • s/\*.*\*//gc
    • 匹配模式
    • 先试一下,是否有高亮匹配
    • 如果没有就:se hls

原子化

  • s/\*\(.*\)\*//gc

    • 给待替换部分加上括号

      • 将其明确
      • 将其原子化
    • 给括号转义
    • 看是否能匹配

  • 仍然能够查找到
  • 下面就是替换部分
  • s/\*(.*)\*/<em>\1</em>/gc

    • \1就是括号中的原子内容
    • 把待替换模式放上去
  • s/\*(.*)\*/<em>\1<\/em>/gc

    • 将需要转义的内容转义
  • 回车,替换成功!

使用参数

  • 还是把html文件转化为md文件
  • 我需要把<h1>替换为 - 空格

    • 先搜索/<h1>,可以搜到,说明尖括号不用转义
    • 再搜索/<h1>.*</h1>
    • 可以匹配
  • 开始写
  • :%s///gc

    • 上框架
  • :%s/<h1>.*</h1>//gc

    • 基础内容
  • :%s/<h1>(.*)</h1>//gc

    • 加括号
  • :%s/<h1>\(.*\)<\/h1>//gc

    • 转义
  • :%s/<h1>\(.*\)</h1>/- \1/gc

    • \1就是搜索中用转义括号括起来的东西
  • 如果要把<h2>替换为 - 怎么办?
  • 如何修改
  • :%s/<h2>\(.*\)</h2>/ - \1/g

多个参数

  • 原来的列表

    • Joe,John
    • oeasy,oyeah
  • 需要的列表

    • John Joe
    • oyeah oeasy
  • 需要前后对调,还要去掉逗号
  • %s///gc

    • :%s 在所有的范围内
  • %s/.*,.*//gc

    • 中间有逗号分开
  • %s/(.*),(.*)//gc

    • 用括弧原子化
  • %s/([^,]*),([^,]*)//gc

    • 括弧里的原子中不能有逗号
  • %s/\([^,]*\),\([^,]*\)//gc

    • 转义
    • \([^,]*\),\([^,]*\)原来的列表

      • ([^,]*\) 前面的第一个原子,内容为除了逗号之外的字符
      • , 分隔符逗号
      • ([^,]*\) 前面的第二个原子,内容为除了逗号之外的字符
  • 高亮显示匹配的话
  • :%s/\([^,]*\),\([^,]*\)/\2 \1/gc

    • \2 \1

      • 把原来的两个原子前后对调
      • 中间加上空格
  • 完成对调

如果是a标签呢?

  • <a href="http://oeasy.org">o</a>变成[o](http://oeasy.org)
  • 这里面需要两个参数

    • 链接网址http://oeasy.org
    • 链接文本o
  • 尝试搜索

    • /<a href=.*>.*</a>可以搜素到
    • /<a href=".*">.*</a>不可以搜素到,说明"需要转义
    • /<a href="(.*)">(.*)</a>把括号、斜杠、引号前面加上转义字符\
    • /<a href=\"\(.*\)\">\(.*\)<\/a>
  • 然后写批量替换
  • :%s///gc

    • 框架
  • %s/<a href=\".*\">//gc
  • %s/<a href=\".*\">.*<\/a>//gc

    • 有高亮匹配,证明模式ok
  • %s/<a href=\"(.*)\">(.*)<\/a>//gc

    • 参数原子化
  • %s/<a href=\"\(.*\)\">\(.*\)<\/a>//gc

    • 转义
  • %s/<a href=\"\(.*\)\">\(.*\)<\/a>/[\2]\1/gc

    • \1对应第1个字符里面匹配的东西
    • \2对应第2个字符里面匹配的东西
    • 然后就可以进行批量替换了

问题

  • <a href="http://oeasy.org">o</a>asdf<a href="http://oeasy.org">o</a>

    • 这句话有两个超链接
    • 但是替换之后
    • 却变成了一个超链接
    • 这怎么办?
  • 贪婪匹配与非贪婪匹配

    • .*对应的是贪婪匹配 greedy
    • .{-}对应的是非贪婪匹配 non-greedy
    • 会匹配第一个符合条件的
  • 什么是贪婪匹配?

贪婪匹配

  • md 中的**重点文字**和**重点**
  • 变成 html 中的 <strong>重点文字</strong>
  • 注意他把这两个分开了
  • \*\*.\{-}\*\*

    • \*\* 代表前两个星号
    • . 的数量是\{-}
    • \*\*代表后两个星号
  • . 的数量是\{-}

  • 根据这个我们来写替换语句
  • :s///gc
  • :s/**(.*)**//gc

    • 给需要转义的字符转义
  • :s/\*\*\(.*\)\*\*//gc

    • 思路就是把.*变成.\{-}
    • 把贪婪变成非贪婪
  • :s/\*\*\(.\{-}\)\*\*//gc

    • 把替换的元素放上
  • :s/\*\*(.\{-})\*\*/<strong>\1<\/strong>/gc
  • 尝试一下
  • 根据这个,是否能解决一行中有多个<a>元素的问题

匹配模式

  • :%s///g
  • :%s/<a href=\".*\">.*<\/a>//g
  • :%s/<a href=\"(.*)\">(.*)<\/a>//g
  • :%s/<a href=\"\(.*\)\">\(.*\)<\/a>//g
  • :%s/<a href=\"\(.\{-}\)\">\(.\{-}\)<\/a>//g

    • 这步就是把.*变成.\{-}
  • :%s/<a href=\"\(.\{-\})\">\(.\{-\}\)<\/a>/[\2]\1/g

如果是<img>标签呢

  • 需要把<img src="http://oeasy.org/o.png" title="o" />

  • 先尝试匹配
  • /<img src=\"\(.*\)\" title=\"\(.*\)\" \/>
  • 也就是/<img src="(.*)" title=(.*)">给引号、括号、斜杠都加上转义/
  • 匹配成功之后开始替换
  • :%s/<img src=\"\(.*\)\" title=\"\(.*\)\" \/>/[!\2]\1
  • 如果一行有多个img怎么办?
  • 还得把贪婪的变成非贪婪的

总结

  • 我们学习了关于模式匹配中使用参数

    • 别着急
    • 先列框架
    • 在一步一步填充进去皮肉
    • 注意转义
    • 冷静仔细
    • 不断看着高亮的反馈
  • 单个参数

    • :%s/<h2>\(.*\)</h2>/ - \1/g
  • 多个参数

    • :%s/<img src=\"\(.*\)\" title=\"\(.*\)\" \/>/[!\2]\1
  • 非贪婪匹配

    • :%s/<a href=\"\(.\{-\})\">\(.\{-\}\)<\/a>/[\2]\1/g
  • 我们介绍一种更神奇的模式,可视化编辑模式
  • 下次再说

oeasy教您玩转vim - 55 - # 参数替换的更多相关文章

  1. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  2. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  3. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  4. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  5. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  6. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  8. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  9. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  10. oeasy教您玩转linux010107那啥在哪 whereis

    回忆上次内容 上次讲了 ls 的参数 (arguement) 和选项 (option) 的设置. 现在我们要制作这样一个列表:

随机推荐

  1. ChannelInboundHandlerAdapter 类

    在 ChannelInboundHandlerAdapter 类中,除了 channelActive 和 channelRead 方法之外,还有其他方法用于处理不同类型的入站事件.以下是这些方法的解释 ...

  2. nginx aio模块添加与配置

    1. 升级目的 让现有服务平滑过渡到高版本,减少服务漏洞,提高服务性能 让其支持nginx最新特性 nginx threads模块 2. 获取nginx1.7.2版本 wget http://ngin ...

  3. FlexBox 行间距

    问题背景 在Flex布局方式下, 父容器约定是换行的方式, 不足以容纳一行子元素的时候, 会单独进行折行, 那么折行的行间距如何处理呢? 解决办法 通过在子Item上面设置margin-top可以模拟 ...

  4. Java常用的三个方法 `wait ` `notify` `notifyAll`

    常用的三个方法 wait notify notifyAll wait();方法使当前线程进入等待状态,直到另一个线程调用该对象的notify()或notifyAll()方法来唤醒它 notify(); ...

  5. ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON

    1.处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到'success',失败的'failure'.处理JSON的实用程序不是基于流的,因此大型JSON文档转换可能会消耗大量内 ...

  6. kettle从入门到精通 第十二课 kettle java代码过滤记录、利用Janino计算Java表达式

    1.下图通过简单的示例讲解了根据java代码过滤记录和利用Janino计算Java表达式两个组件. 2.根据java代码过滤记录 1)步骤名称:自定义 2)接收匹配的行的步骤(可选):下面条件(jav ...

  7. mysql中,时间类型datetime和timestamp的区别

    TIMESTAMP和DATETIME的相同点: 两者都可用来表示 YYYY-MM-DD HH:MM:SS 类型的日期. TIMESTAMP和DATETIME的不同点: 1>  两者的存储方式不一 ...

  8. FPS 是啥

    什么是 FPS 呢 ,FPS就是你所编写的应用程序一秒钟运行的次数,一秒钟运行120次,你的 FPS 就是 一百二 什么是帧速率 为什么有帧速率这一说 帧速率在 数学微积分中是平均运行的力度或者说是强 ...

  9. 文件系统(六):一文看懂linux ext4文件系统工作原理

    liwen01 2024.06.09 前言 Linux系统中的ext2.ext3.ext4 文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级.目前ext4是一个相对 ...

  10. 解决git 区分文件名大小写

    问题:两人协作开发同一分支时,由于一方将组件文件名小写开头,并且推送到远程分支,导致我每次拉取代码会将我本地文件名改成小写,并且我手动改成大写后推送到远端仓库,远端仓库文件名无变化,还是小写. 查证后 ...