vim结合正则表达式可以实现复杂的功能,如
vim中常用的查找替换 %s/匹配字符串/替换字符串/g
若只想匹配字符串的次数:
%s/字符串/&/gn
n,代表只报告匹配的个数,而不进行实际的替换。
如果只想当前行内的出现该字符串次数呢?
:s/字符串/&/gn
如果在m和n行之间查找 字符串 出现的次数
:m,ns/字符串/&/gn
如果每行的bbb不超过2个,简单地可以这样:
:%s/(bbb.*)bbb/1/
这条命令比较好理解,在普通vi下应该也可以用。但由于*的贪婪性,当bbb超过2个时会删除最后一个bbb而不是第二个。为了避免这个问题,上面的命令可以改写成:
:%s/(bbb.{-})bbb/1/
(bbb.*)@<=是一个所谓0宽度的“断言”(说老实话, 我一直对正则里某些术语的翻译大倒胃口),通俗地说它匹配的不是字符串而是“位置”。什么样的位置呢?这里就是那些前面匹配bbb.*的位置,即前面出现过bbb的位置。注意这里用了“那些”,因为这样的位置有很多,在第一个bbb的后面的位置都符合条件。那么第二个bbb出现的位置也符合条件,自然第二个bbb就匹配了下面这个表达式:
(bbb.*)@<=bbb
当然第三个第四个(如果有的话)也匹配,但第一次匹配是第二个bbb。
看来在断言中出现的量词,讨论其贪婪性时要小心了。
VIM真是强大,对正则表达式的语法扩展也是于主流之外自成体系,难免给我们又增加了一些学习的成本
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级