vim全局替换命令

替换命令的基本语法
语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g

[addr] 表示检索范围,省略时表示当前行。

如:"1,20" :表示从第1行到20行;
:50, 100 s / old / new / g

"%" :表示整个文件,同"1,$";

".,$" :从当前行到文件尾;
s : 表示替换操作

[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义

确认替换

使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法

在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:

:1, 30 s /old/new/ gc

将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?
y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。

上下文相关替换

除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。

语法格式如下:
:g /pattern/s/old/new/g 将会把包含pattern的行中,把所有old替换为new
第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。

如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它:
:g/string/s//new/g 等价于 :g/string/s/string/new/g

下面是一些例子:
将That or this 换成 This or that
:%s/(That) or (this)/\u\2 or \l\1/
—-
将句尾的child换成children
:%s/child([ ,.;!:?])/children\1/g
—-
将mgi/r/abox换成mgi/r/asquare
:g/mg([ira])box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g
—-
将多个空格换成一个空格
:%s/ */ /g
—-
使用空格替换句号或者冒号后面的一个或者多个空格
:%s/([:.]) */\1 /g
—-
删除所有空行
:g/^ /d:g/[][] /d
—-
在每行的开始插入两个空白
:%s/^/> /
—-
在接下来的6行末尾加入.
:.,5/ /./:g/./m0O<=>:g//m0O,:g!/[09]/m <=> g/^[^0-9]/m 121710:1,10g//12,17t
~~~~重复次数的作用
—-
将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值