欢迎光临散文网 会员登陆 & 注册

oeasy教您玩转vim - 54 - # 匹配替换

2021-10-14 07:56 作者:oeasy  | 我要投稿

查找细节

回忆上节课内容🤔

  • 我们学习了

    • 替换 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

  • addand 被替换

  • 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)


oeasy教您玩转vim - 54 - # 匹配替换的评论 (共 条)

分享到微博请遵守国家法律