oeasy教您玩转vim - 54 - # 匹配替换
查找细节
回忆上节课内容🤔
我们学习了
替换
substitude
替换单行
:s/shiyanlou/oeasy
加上
range
:3,5s/shiyanlou/oeasy
:%s/shiyanlou/oeasy
加上
flag
:3,5s/shiyanlou/oeasy/g
多个替换:3,5s/shiyanlou/oeasy/gc
多个替换且逐个确认替换还是很方便的
但是我想替换中使用正则表达式
可以么?🤔
先回忆一下正则表达式模式匹配
模式 - 列举字符
[abcd]
表示匹配方括号中列举的
任意一个 字符
abcd 中的任意一个字符
[a-z]
可用
中划线-
` 表示字符范围来减少列举的[a-d]
等价于[abcd]
[^abcd]
模式 - 常用符号
表示匹配除方括号中字符以外的任意字符
除了
abcd
之外的任意字符.
等价于
[^\n]
除了换行符
( \n )
以外,表示匹配任意一个字符\l
等价于
[a-z]
表示匹配 任意一个
小写字母
意思是lowercase
\L
等价于
[^a-z]
表示匹配 任意一个
除小写字母外的其他字符
\u
等价于
[A-Z]
表示匹配 任意一个
大写字母
意思是uppercase
\U
等价于
[^A-Z]
表示匹配
任意一个除大写字母外的其他字符
\w
等价于
[0-9A-Za-z_]
表示匹配
任意一个字母、数字、下划线
\W
等价于
[^0-9A-Za-z_]
表示匹配
任意一个字符除了字母、数字、下划线。
\d
等价于
[0-9]
表示匹配
任意一个数字
\D
等价于
[^0-9]
表示匹配
任意一个除数字外的其他字符
\x
等价于
[0-9A-Fa-f]
表示匹配
任意一个十六进制数字
\X
等价于
[^0-9A-Fa-f]
表示匹配
任意一个除十六进制数字外的其他字符
\s
包括两种
分隔符
空格
和tab
帮助手册

起止标记
然后我们明确一下起止标记
^
表示匹配 输入字符串的开始位置 (行首)。$
表示匹配 输入字符串的结束位置 (行尾)。
-\<
表示匹配 单词词首。\>
表示匹配 单词词尾。
对应单词
:%s/four/4/g
把所有的
four
替换为4
但是同时
twenty-four
被替换为
twenty-4
这不合理
我们需要`:%s/\<four\>/4/g
\<four\>
匹配独立的four
这样替换就合理了
单词匹配
如果我们要替换所有的以
a
开头d
结尾的单词不允许在词中进行替换
oeasy
:%s/\<a.*d\>/oeasy/g
add
、and
被替换band
不被替换
删除空行
首先我们找到空行
/^$
从开头
^
到结尾$
中间没东西找到了以后,我们来替换
%s/^$//
这并不能删除删完了之后空行还是存在
我们可以使用
g
命令:g/^$/d
如果开头结尾之间有空格怎么办?
/^\s*$
先找到匹配\s表示空格和tab
*表示0-任意多个空格或者tab
:g/^\s*$/d
转义字符
如果我们要删除所有
//
开头的行这个
/
需要转义先搜索/^//.*$
:%s/^\/\/.*$//g
删除了注释内容
但是但空行还在
:g/^\/\/.*$/d
删除了空行
但是开头有空格和tab的无法删除
:g/^\s*\/\/.*$/d
把
\\
前面有空格和tab的也删除了
总结
进行了模式匹配批量替换的的操作
替换单词
:%s/\<a.*d\>/oeasy/g
转义字符
%s/^\/\/.*$/d
删除空行
:g/^\s*$//d
删除注释行
:g/^\s*\/\/.*$/d
替换还有一些什么玩法吗?🤔
下次再说 *
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)