[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. Android 13 - Media框架(23)- ACodecBufferChannel

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解 ACodecBufferChannel 上一节我们了解到input buffer 和 output buffer 是如何分配的了, ...

  2. docker lnmp配置

    1.lnmp网络与目录规划 172.16.10.0/24 nginx:172.16.10.10 mysql:172.16.10.20 php:172.16.10.30 网站访问主目录:/wwwroot ...

  3. 解决 Https 站点请求 Http 接口服务后报 the content must be served over HTTPS 错误的问题

    问题分析 之前将自己所有的 Http 站点全部更新为 Https 站点,但是在请求后台接口服务的时候还是 Http 请求,导致部署之后,直接在控制台报 This request has been bl ...

  4. kettle从入门到精通 第六十二课 ETL之kettle job中发送邮件(带多个附件),闭坑指南

    1.今天群里一个朋友加我微信遇到问下向我求助.一顿测试下来发现原来是使用kettle姿势不对,对kettle没有完全驾驭导致的,今天和大家一起分享下这个问题. 2.先自我膨胀下,自从写kettle系列 ...

  5. redis自动化安装

    1.ruby脚本自动化安装 1.安装ruby开发环境 yum install rubygems -y 2.通过ruby包管理工具,安装操作redis的模块 gem sources --remove h ...

  6. Vue学习:21.mixins混入

    在Vue中,mixins(混入)是一种用于分发Vue组件中可复用功能的灵活机制.它们允许你抽取组件中的共享功能,如数据.计算属性.方法.生命周期钩子等,并将其作为单独的模块复用到多个组件中.这种方式有 ...

  7. session 和 cookie 有什么区别?

    a.存储位置不同:session 存储在服务器端:cookie 存储在浏览器端. b.安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改. c.容量和个数限制:cookie 有容量限 ...

  8. linux命令查看内存命令free -h whereis locate find查找命令

    linux命令查看内存命令free -h  whereis locate find查找命令 1.free -h root@hz-auto-eureka-test-03:/usr/local/tomca ...

  9. PowerBI_一分钟了解POWERBI计算组功能及作用(第一部分)

    1: X-mind&计算组(CALCULATION GROUP)介绍 1.1 什么是计算组 PowerBI的计算组功能可以显著减少必须创建的冗余度量值数,通过允许将DAX表达式定义为应用于模型 ...

  10. 高级前端开发需要知道的 25 个 JavaScript 单行代码

    1. 不使用临时变量来交换变量的值 例如我们想要将 a 于 b 的值交换 let a = 1, b = 2; // 交换值 [a, b] = [b, a]; // 结果: a = 2, b = 1 这 ...