vim替换

替换

本文中设待替换的内容为xxx,替换后的内容为hhh。

注意:其中所有的/都可以换为#或者+,但是在单个最短指令中要统一。比如g/xxx/ s//hhh/g可以写为:g/xxx/ s##hhh#gg+xxx+ s//hhh/gg#xxx# s++hhh+g等形式。因为实质上,g/xxx/ s//hhh/g相等于两条指令,g/xxx/和s//hhh/g。其中,g/xxx/表示列出有xxx的行,s//hhh/g表示替换==g/xxx/==命令查找到的内容。

参数

[range]s/[before]/[after]/[ option]

  • range:需要替换的范围,缺省值为当前行,相当于.
  • before:待替换的内容,缺省值为最近一次查找操作查找的内容,比如g/xxx/中的xxx或者/ok中的ok
  • after:替换后的内容,缺省值为空,即用空值覆盖原始内容
  • option:选项,选择替换的方式,缺省值为仅对一行中首次出现的before进行替换

range

单行

[range] = . | num | $ | 'mark

  • .:表示当前行,比如:s/xxx/hhh/ = .s/xxx/hhh/ 表示将光标所在行的第一个xxx替换为hhh
  • num:表示行号,比如:2s/xxx/hhh/ 表示将第二行的第一个xxx替换为hhh
  • $:表示最后一行,比如:$​s/xxx/hhh/ 表示将最后一行的第一个xxx替换为hhh
  • 'mark或者’flag:表示标记过的行,比如:'as/xxx/hhh/ 表示将标记a所在的行(之前要使用ma做过标记)中第一个xxx替换为hhh

用法示例:

  • .+1s/xxx/hhh/ 将当前光标所在行的下面一行中第一个xxx替换为hhh
多行

[range] = [start_ine],[end_line] or /[before]/ or ?[before]?

[start_ine],[end_line]

[start_ine] = . | num | $ | 'mark | [start_ine]±num

[end_line] = . | num | $ | 'mark | [end_line]±num

start_line:起始范围,end_line:终止范围。其中. | num | $ | 'mark的含义同单行章节。

用法示例:

2,6s/xxx/hhh/								将第二行到第六行中每一行的第一个xxx替换为hhh

2,s/xxx/hhh/  =  2,.s/xxx/hhh/				将第二行到光标所在行中每一行的第一个xxx替换为hhh

,6s/xxx/hhh/  =  .,6s/xxx/hhh/				将光标所在行到第六行中每一行的第一个xxx替换为hhh

,s/xxx/hhh/   =  s/xxx/hhh/  =  .s/xxx/hhh/	表示将光标所在行的第一个xxx替换为hhh

'as/xxx/hhh/								将标记a所在的行(之前要使用ma做过标记)中第一个xxx替换为hhh

'a,'bs/xxx/hhh/								将标记a所在的行到标记b所在的行范围中的每一行的第一个xxx替换为hhh

.+1,$-1s/xxx/hhh/							将当前光标所在行的下面一行与倒数第二行范围中的每行中第一个xxx替换为hhh
/[before]/ or ?[before]?

/[before]/ :表示向下查找,找到首次出现before内容的行(不包括光标所在行

?[before]?:表示向上查找,找到首次出现before内容的行(不包括光标所在行

注意:以上before均可取正则表达式

用法示例:

  • /xxx/s//hhh/ 从光标所在行向下查找首次出现xxx内容的行,并将该行中第一个xxx替换为hhh
  • ?xxx?s//hhh/ 从光标所在行向上查找首次出现xxx内容的行,并将该行中第一个xxx替换为hhh
  • /aaa/s/xxx/hhh/ 从光标所在行向下查找首次出现aaa内容的行,并将该行中第一个xxx替换为hhh
  • /xxx/s//hhh/g 从光标所在行向下查找首次出现xxx内容的行,并将该行中所有的xxx替换为hhh
全文

[range] = % or gsymbol[before]symbol or 1,$

gsymbol[before]symbol:表示全文查找出现before内容的行。其中,symbol可取:/ | ? | # | +

用法示例:

  • %s/xxx/hhh 将所有行中每行第一个xxx替换为hhh
  • %s/xxx/hhh/g 将文中所有的xxx替换为hhh
  • g/xxx/ s//hhh/ 将所有行中每行第一个xxx替换为hhh
  • g/xxx/ s//hhh/g 将文中所有的xxx替换为hhh

option

  • g:对一行中所有出现的before均替换(global
  • c:在替换前要求用户确认
  • e:忽略执行过程中的错误
  • :不写,表示缺省即仅对一行中首次出现的before进行替换
    注意:上面的所有option都可以组合起来使用,比如 gc 表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会要求用户确认。

用法示例:

参考文献

https://www.cnblogs.com/david-wei0810/p/6385988.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值