[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. xFormers

    xFormers可以加快图像生成速度(几乎快两倍)并使用更少的 GPU 内存.它被广泛使用并且工作得很好,但与您之前生成的图像相比,它有时会生成不同的图像(对于相同的提示+设置). 重要的!!xFor ...

  2. 模拟重装Kubernetes(k8s)集群:删除k8s集群然后重装

    目录 一.系统环境 二.前言 三.重装Kubernetes集群 3.1 环境介绍 3.2 删除k8s所有节点(node) 3.3 kubeadm初始化 3.4 添加worker节点到k8s集群 3.5 ...

  3. MySQL学习笔记-事务

    事务 事务:是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(当操作中某一步出现异常时,前面已执行的步骤也会失 ...

  4. 使用python在k8s中创建一个pod

    要在Kubernetes (k8s) 中使用Python创建一个Pod,你可以使用Kubernetes Python客户端库(通常称为kubernetes或kubernetes-client).以下是 ...

  5. 剑指Offer-60.把二叉树打印成多行(C++/Java)

    题目: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 层次打印二叉树,在打印二叉树结点的同时,保存好结点的左右孩子,不断的重复打印,直到需要打印的数组为空即可. 程序: C ...

  6. django跨域设置

    Django 跨域问题,解决前后端连接 CORS 1.安装 django-cors-headers pip install django-cors-headers 2.配置settings 在 INS ...

  7. docker 报Failed to create thread: Operation not permitted (1) 解决方法

    docker启动容器时报:Failed to create thread: Operation not permitted (1) 原因:docker内的用户权限受限 解决办法1: 启动docker时 ...

  8. Blender练习——SciFi枪械.md

    Blender练习--SciFi枪械 一.基本操作 常用快捷键 E 挤出 B 倒角,中途可通过滚轮或S来调整细分 Alt+点选 循环选择 Ctrl Alt+点选 并排选择 F 补面,比如一个碗口,将碗 ...

  9. Asp.net core Swashbuckle Swagger 的常用配置

    背景 .net core Swashbuckle Swagger 官方文档:https://github.com/domaindrivendev/Swashbuckle.AspNetCore 我们发现 ...

  10. Typora行内公式识别不了

    Typora行内公式识别不了,主要是因为行内公式属于LaTeX扩展语法,并非Markdown的通用标准 需要在Typora的"文件"-"偏好设置"-" ...