vim提供了命令:s
(是单词替换substitue的简写)来进行文本搜索以及替换,下面列举了一些例子如何使用vim中的搜索和替换模块。
:s
命令搜索一个文本正则,并使用一个文本替换它。命令中有许多选项可以选择,这里介绍几个常用的组合。
:%s/foo/bar/g
找到当前文档所有出现的foo,并将其替换成为bar。
:s/foo/bar/g
找到当前行中出现的所有foo,并替换为bar。
:%s/foo/bar/gc
将所有foo替换为bar,但是需要用户确认。
:%s/\<foo\>/bar/gc
将所有单个为foo的单词替换为bar,并且需要用户确认。
:%s/foo/bar/gci
讲所有的foo替换为bar,但是正则式中可以有满足i
标志的不敏感项(insensitive)
总体而言,g
标志表示全局,即对所有出现的情况都做处理。c
标志需要用户去确认是否替换,vim中的输出类似于:
replace with foobar (y/n/a/q/l/^E/^Y)?
更多情况
选定替换区域
:5,12s/foo/bar/g
将5到11行的foo替换为bar
:'a,'bs/foo/bar/g
把vim中标记为a
和b
之间的foo替换为bar
:'<,'>s/foo/bar/g
如果vim中有visual工作(v键可以工作),将选定区域内的foo替换为bar
:,$s/foo/bar/g
将当前行到最后行之间的foo替换为bar
:,+2s/foo/bar/g
将当前行和随后两行中的foo替换为bar
:g/^baz/s/foo/bar/g
将以baz为行首的foo替换为bar
匹配的时候
.,*,\,[,^
和$
是元字符,需要通过反斜杠转义
+,?,|,&,{,(,)
也需要注意避免
\t
是制表符,\s
是空白符
\n
是换行,\r
是CR(carriage return=Ctrl-M=^M)
替换的时候
\r
是换行,\n
是空字符
\&
是字符&
,而&
是满足搜索模式的文本
\O
将插入匹配所有模式的文本
\1
插入第一个回溯引用,并以此类推