oeasy教您玩转vim - 55 - # 参数替换
[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 - # 参数替换的更多相关文章
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
- oeasy教您玩转python - 006 - # hello world
Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010107那啥在哪 whereis
回忆上次内容 上次讲了 ls 的参数 (arguement) 和选项 (option) 的设置. 现在我们要制作这样一个列表:
随机推荐
- Vue 3 组件基础与模板语法详解
title: Vue 3 组件基础与模板语法详解 date: 2024/5/24 16:31:13 updated: 2024/5/24 16:31:13 categories: 前端开发 tags: ...
- Linux之top命令下的交互快捷键
快捷键: 数字1----查看服务器的cpu逻辑数 M -根据驻留内存大小进行排序 P -根据CPU使用百分比大小进行排序 T -根据时间/累计时间进行排序 c -切换显示命令名称和完整命令行 t -切 ...
- Java自增
Java自增 本文分为以下部分: 栗子 栗子解释 来点复杂的 字节码解读 总结 栗子 java存在一种神奇的操作符,++,自增1,但是经常分不清楚 i++ 和++i 两者的区别,虽然最后结果可能都是 ...
- 莫烦tensorflow学习记录 (1)session会话控制、variable变量、placeholder传入值
https://mofanpy.com/tutorials/machine-learning/tensorflow/session/ Session 会话控制 #https://mofanpy.com ...
- FFMPEG 信息查询
一.问题描述 最近测试反馈一个隐私模式的问题,主播端启用隐私模式之后,在观看端发现画面转菊花并且还有回跳的现象 二.问题分析: 从网上下载了直播的视频文件,进行了一下分析,发现视频长度和音频长度不匹配 ...
- itest(爱测试)开源接口测试&敏捷测试管理平台8.1.0发布
(一)itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包分配测试用 ...
- 微信小程序设置swiper圆角在ios上失效
今天在给轮播图添加圆角的时候,发现在安卓机上是有圆角的,但是在苹果手机上圆角却失效了,后来翻阅了文档发现这是个官方的bug 解决方法1 border-radius: 20rpx; /*再设置个tran ...
- Linux C操作XML文件
1 简介 介绍使用C语言操作xml文件. 使用的开源库:mxml mxml源码路径:michaelrsweet/mxml: Tiny XML library. (github.com) mxml官网: ...
- kettle从入门到精通 第五十一课 ETL之kettle Avro input
1.我们在学习nifi的过程中有接触到Avro schema,当时我在想kettle应该也支持Avro,果不其然kettle也是支持Avro文件的读和写的.今天我们一起来学习下kettle中如何使用A ...
- 不好分类的好题Record
这里装的是一些不太好分类的. problem 1 给你 \(n\) 个序列,第 \(i\) 个序列的长度为 \(m_i\),要求在每个序列中选择一个数,每种选法的代价为选择的 \(n\) 个数之和,请 ...