[翻译]
" substitution
"替换
:%s/fred/joe/igc : general substitute command
普通替换命令
[注解]
:help :s
:help :s_flags
:help 10.3
将文件中所有的fred替换为joe,替换时忽略fred的大小写,一行中有多个匹配时,对每一个都进行替换,替换前提示。
这是最简单的替换命令,需要了解:s命令的标志位,例如“i”代表忽略大小写,“g”代表对行内所有匹配都做替换,“c”代表替换前提示。
“%”字符表示在文件范围内进行替换,它相当于“1,$”,即从第一行替换到最后一行。
[翻译]
:%s//joe/igc : Substitute what you last searched for *N*
替换你最后查找的内容
[注解]
当“:s”命令中的查找模式字串为空时,会使用你最后一次使用查找命令所查找的字符串作为查找模式字串,也就是说,会替换你最后一次查找的内容。查找的内容可以是你使用“/”或“?”命令所查找的,也可以是上一次“:s”命令的查找模式,或者是“:global”命令的查找模式。
上面的命令是把你最后一次查找的内容,替换为joe。
[翻译]
:%s/~/sue/igc : Substitute your last replacement string for *N*
替换你最后替换的字符串
[注解]
:help /~
当“:s”命令中的查找模式字串为“~”时,会替换你最后替换的字符串。例如,上次你执行了“:%s/abc/joe/igc”命令,那么上面的命令相当于“:%s/joe/sue/igc”。
[翻译]
:%s//r//g : Delete DOS returns ^M
删除 DOS 回车符 ^M
[注解]
:help //r
有时打开DOS文件时,会发现第行结尾都有一个^M,这么命令就是用来删除^M的。
[翻译]
" Is your Text File jumbled onto one line? use following
"你的文本文件是否乱七八糟的排成一行?使用如下命令
:%s//r//r/g : Turn DOS returns ^M into real returns
转换 DOS 回车符 ^M 为真正的回车符
[注解]
:help //n
我用VIM打开文件时还没遇到过所有内容排成一行的情况。
这条命令怀疑是作者笔误,会不会应该是“:%s//r//n/g”,待确认。
经过与作者确认,“:%s//r//r/g”看起来比较奇怪,但确实会工作。因为我从未遇到过VIM中内容排成一行的情况,因此没有实验。有兴趣的可以试一下。
[翻译]
:%s= *$== : delete end of line blanks
删除行尾空格
:%s= /+$== : Same thing
同上
[注解]
:help /$
:help E146
这两条命令用来删除行尾空格,其中“$”匹配行尾换行符。
这两条命令有一个特殊之处,它们没用常见的“/”字符作为“:s”命令各个参数的分隔符,而是使用了“=”字符。这种用法在查找或替换的内容中包含“/”字符时非常有用。
[翻译]
:%s#/s*/r/?$## : Clean both trailing spaces AND DOS returns
删除行尾空格和 DOS 回车符
:%s#/s*/r*$## : same thing
同上
[注解]
:help //?
这两条命令用来删除行尾的空格以及DOS回车符,和上面的技巧一样,它也没有使用“/”字符作为“:s”命令各个参数的分隔符,而是使用了“#”字符。
这两条命令还使用了“/?”正则表达式,它匹配它前面出现的字符0次或1次。
[翻译]
" deleting empty lines
" 删除空行
:%s/^/n/{3}// : delete blocks of 3 empty lines
删除三行空行
[注解]
:help //n
不再赘述。
[翻译]
:%s/^/n/+//r/ : compressing empty lines
压缩多行空行为一行
[注解]
不再赘述。
[翻译]
:%s#<[^>]/+>##g : delete html tags, leave text (non-greedy)
删除html标记,只保留文字 (非贪婪模式)
[注解]
不再赘述。
所谓贪婪模式,是指像“*”、“/+”这类元字符,它们在匹配时,总是尽可能多的匹配,就像一条贪吃蛇,总想多吃,:-)
如果在匹配时尽可能少的匹配,则称为非贪婪模式。
个人感觉上面的正则表达式,应该为贪婪模式。
作者说“[^>]”一定是非贪婪的,思考一下确实应该如此。因为“[^>]”表示匹配“>”以外的任意字符,也就是说,只要遇到一个“>”匹配就结束了,不会出现匹配多个“>”的情况。如果上面的正则式写为“<./+>”的话,就会是贪婪模式了,例如,它会匹配整个“<test1> <test2>”
[翻译]
:%s#</_./{-1,}>##g : delete html tags possibly multi-line (non-greedy)
删除可能跨多行的html标记 (非贪婪模式)
[注解]
不再赘述。
[参考文档]
1. http://www.rayninfo.co.uk/vimtips.html
2. http://groups.google.com/group/Vim-cn/msg/f72fba0645955101?
3. VIM帮助文件
4. http://vimcdoc.sourceforge.net/
[尾记]
本文可以自由应用于非商业用途。转载请注明出处。
原文链接:http://blog.csdn.net/easwy