vim查找与替换

语法为:[addr]s/源字符串/目的字符串/[option]

[addr] 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
2.1,简单替换表达式

替换命令可以在全文中用一个单词替换另一个单词:

:%s/four/4/g

最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可

        上述命令会将thirtyfour替换为thirty4,将fourty替换为4ty。可以通过“\<”和“\>”指定单词的开头和结尾,命令为:

:%s/\<four\>/4/g

如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:

         :%s/\<four\>/4/gc

2.2,删除多余的空格

要删除这些每行后面多余的空格,可以执行如下命令:

         :%s/\s\+$//

命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是

“\s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。

2.3,匹配重复性模式

星号项 “*” 规定在它前面的项可以重复任意次。因此:

         /a*

匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*”仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配“a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加“\(”,后面加 “\)”。因此这个命令:

         /\(ab\)*

要避免匹配空字串,使用 “\+”。这表示前面一项可以被匹配一次或多次。

         /ab\+

要匹配一个可选项,用 “\=”。 例如:

         /folders\=

匹配 “folder” 和 “folders”。

2.4,指定重复次数

要匹配某一项的特定次数重复,使用 “\{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

         /ab\{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

    当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:

         模式            匹配次数

         \{,4}             0,1,2,3 或 4

         \{3,}             3,4,5,等等

         \{0,1}            0 或 1,同 \=

         \{0,}             0 或 更多,同 *

         \{1,}             1 或 更多,同 \+

         \{3}              3

 2.5,多选一匹配

在一个查找模式中,”或” 运算符是 “\|”。例如:

         /foo\|bar

这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:

         /one\|two\|three

匹配 “one”,”two” 或 “three”。

    如要匹配其多次重复,那么整个抉择结构须置于 “\(” 和 “\)” 之间:

         /\(foo\|bar\)\+

这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

    再举个例子:

         /end\(if\|while\|for\)

这个命令匹配 “endif”,”endwhile” 和 “endfor”。

2.6, 一些例子

#将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!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#将文件的第12到17行内容复制10词放到当前文件的尾部
:1,10g/^/12,17t$
~~~~重复次数的作用
—-
#将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值