Vim备忘录:搜索和替换

96
fromradio
2016.08.11 09:34* 字数 534

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中标记为ab之间的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插入第一个回溯引用,并以此类推

Vim备忘录
Web note ad 1