一.:[address]s/from/to/[flags]
1.基本范例
:s/^\<the\>/these/ 用these替换当前行中第1个the |
:s/part1 /part2/g 用part2替换当前行中所有的part1 |
:%s/part1/part2 用part2替换所有行中每行第1个part1 |
:%s/part1/part2/g 用part2替换所有行中所有的part1 |
:50s/part1 /part2 用part2替换第50行中的第1个part1 |
:2,$s/part1/part2/g 用 part2替换第2行到末行中所有的part1 |
:.,+3s/part1/part2 用part2替换当前行以及当前行后面的三行中每行第1个part1 |
:.,-3s/part1/part2/g 用part2替换当前行以及当前行前面的三行中所有的part1 |
:.,$s/yes/no/ |
/str//w filea 删除后保存 |
:/str1/str2/w filea 替换后保存 |
:s+one/two+one or two+要替换的字串中包含/用+作为分隔符 |
/str/s/str1/str2 在首将出现str的行中出现的第一个str1替换为str2 |
g/str/s/str1/str2 在所有行中将含str的行中出现的第一个str1替换为str2 |
g/str/s/str1/str2/g在所有行中将含str的行中出现的所有str1替换为str2 |
:g/字串1/s//字串2/ 用“字串2”替换“字串1”,每行只替换第一个 |
2.以下是采用替换操作进行常见注释格式操作的命令样式
:s/^/# #用”#”注释当前行 |
:2,50s/^ /# #在2~50行首添加”#”注释 |
:.,+3s/^/# #用”#”注释当前行和当前行后面的三行 |
:%s/^/# #用”#”注释所有行 |
3.替换一个word
如果你是在写程序,你可能只想替换那些出现在注释中的"four",代码中的留下。这可有点为难,"c"标志可以让每个目标被替换之前询问你的意见: :%s/\<four\>/4/gc replace with Teacher (y/n/a/q/l/^E/^Y)? 此时,你可以有几种答案: y 好吧,替换吧 n 不,这个先留着 a 别问了,全部换掉吧(这群教授都不够格?? :-) ) q 退出,剩下的也不要管了 l 把现在这个改完就退出吧 |
二.区块的复制.移动.替换.删除(与sed相同)
:n1 n2 m n3 | move |
:n1,n2 co $ | copy |
:g/字串/p | 显示所有带有“字串”的行 |
:g!/字串/p | 显示不带有字串的行 |
:n1,n2 g/字串/p | 显示从n1到n2中,所有带有“字串”的行 |
:g/字串/d | 删除所有带有“字串”的行 |
:g/字串/!d | 删除所有不带有“字串”的行 |
:v/.xxxx./d 只保留含 xxxx 的行,其余都删掉