Vim 与 Vi 的关系,可以确定的是 Vi 的所有功能几乎都已经囊括到了 Vim 中,同时 Vim 较 Vi 的优势和亮点也是不胜枚举的,比如:
Vim 支持更多语言的语法高亮。
Vim 支持更多的操作系统和平台,包括 UNIX/Linux、Windows、MAC 等。
Vim 支持强大的插件功能。
Vim 支持通过 SSH/HTTP 方式的远程文本编辑功能。
Vim 支持多层级的 undo 和 redo。
Vim 可以直接编辑压缩包(gzip、bzip2、zip)中的文件。
基础替换用法
在 Vi 的普通模式下,先输入冒号(:),进入命令行模式,这是 Vi 做一切替换操作的前提。
假如我们想将 abc 替换为 xyz,那么就这样:
:s/abc/xyz/
不过要特别注意,这个替换没有你想象得那么顺利,因为它只能针对光标当前所在行进行替换,而且更糟糕的是,它只替换当前行中第一个匹配到的 abc。
举个例子,如果此行内容为“I write abc,I read xyz and abc.”。那么替换后的结果为“I write xyz,I read xyz and abc.”。
接下来,我们的改进方案来了,请注意,我们在替换命令的最后面加上了 g 这个字母:
:s/abc/xyz/g
这样可以实现在光标所在行,对所有匹配到的 abc 都替换为 xyz。继续举这个例子,如果此行内容为“I write abc,I read xyz and abc.”。那么替换后的结果为“I write xyz,I read xyz and xyz.”。
可惜的是,这个方案仍局限在光标所在行,还是无法替换文件中所有行中的 abc。所以,我们的方案继续改进,我们在替换命令的最前面加上了“1,$”的表达式:
:1,$s/abc/xyz/g
其实我们可以在替换命令的最前面加上类似“m,n”格式的表达式,来表示替换动作所能影响到的行范围,1 表示第一行,$ 表示最后一行。当然你也完全可以指定其他行范围,比如,10,50s/abc/xyz/g 就表示只替换第 10 行到第 50 行中的 abc。
在这里再教你一个小技巧,如果你想做全文替换,写 1,$ 要三个字符,而用 % 来代替,只需要一个字符,所以我们的替换命令可以改写为:
:%s/abc/xyz/g