VIM 中常用的替 换 模式 总结 。
1 , 简单 替 换 表达式
替 换 命令可以在全文中用一个 单词 替 换 另一个 单词 :
:%s/four/4/g
"%" 范 围 前 缀 表示在所有行中 执 行替 换 。最后的 "g" 标记 表示替 换 行中的所有匹配点。 如果仅仅对当前行进行操作,那么只要去掉 % 即可
如果你有一个象 "thirtyfour" 这样 的 单词 ,上面的命令会出 错 。 这种 情况下, 这 个 单词 会被替 换 成 "thirty4" 。要解决 这 个 问题 ,用 "/<" 来指定匹配 单词开头 :
:%s//<four/4/g
显 然, 这样 在 处 理 "fourty" 的 时 候 还 是会出 错 。用 "/>" 来解决 这 个 问题 :
:%s//<four/>/4/g
如果你在 编码 ,你可能只想替 换 注 释 中的 "four" ,而保留代 码 中的。由于 这 很 难 指定, 可以在替 换 命令中加一个 "c" 标记 , 这样 , Vim 会在 每 次替 换 前提示你:
:%s//<four/>/4/gc
2 ,删除多余的空格
要 删 除 这 些 每 行后面多余的空格,可以 执 行如下命令:
:%s//s/+$//
命令前面指明范 围 是 "%" ,所以 这 会作用于整个文件。 "substitute" 命令的匹配模式是
"/s/+$" 。 这 表示行末( $ )前的一个或者多个( /+ )空格( /s )。替 换 命令的 "to" 部分是空的: "//" 。 这样 就会 删 除那些匹配的空白字符。
3 ,匹配重复性模式
星号 项 "*" 规 定在它前面的 项 可以重 复 任意次。因此 :
/a*
匹配 "a" , "aa" , "aaa" ,等等。但也匹配 "" ( 空字串 ) ,因 为 零次也 包含在内。星号 "*" 仅仅应 用于那个 紧邻 在它前面的 项 。因此 "ab*" 匹配 "a" , "ab" , "abb","abbb" ,等等。如要多次重 复 整个字符串,那 么该 字符串必 须 被 组 成一个 项 。 组 成一 项 的 方法就是在它前面加 "/(" ,后面加 "/)" 。因此 这 个命令 :
//(ab/)*
匹配 : "ab" , "abab" , "ababab" ,等等。而且也匹配 "" 。
要避免匹配空字串,使用 "/+" 。 这 表示前面一 项 可以被匹配一次或多次。
/ab/+
匹配 "ab" , "abb" , "abbb" ,等等。它不匹配 后面没有跟随 "b" 的 "a" 。
要匹配一个可 选项 ,用 "/=" 。 例如 :
/folders/=
匹配 "folder" 和 "folders" 。
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
5 ,多选一匹配
在一个 查 找模式中, " 或 " 运算符是 "/|" 。例如 :
/foo/|bar
这 个命令匹配了 "foo" 或 "bar" 。更多的抉 择 可以 连 在后面 :
/one/|two/|three
匹配 "one" , "two" 或 "three" 。
如要匹配其多次重 复 ,那 么 整个抉 择结 构 须 置于 "/(" 和 "/)" 之 间 :
//(foo/|bar/)/+
这 个命令匹配 "foo" , "foobar" , "foofoo" , "barfoobar" ,等等。
再 举 个例子 :
/end/(if/|while/|for/)
这 个命令匹配 "endif" , "endwhile" 和 "endfor" 。