使用Vim很长时间了, 我对于替换命令的印象还是最基本的这样:%s/pattern/string/g
所以写下本文是为了好好梳理一下, 本文只总结最常用的方法对于不常用或比较复杂的不进行介绍
本文基于Vim Docs, 想看官方文档的请在Vim中运行:h :s
基本格式
替换命令的基本格式是:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
我们可以分成
[range]s[ubstitute]{pattern}{string}[flags][count]
来进行讲解
[range]
range太强大, 很多地方都可以用的到, 所以我单独写了一篇: Vim range详解
s[ubstitute]
这里的s[ubstitute]代表动作为替换, 由于substitute太长, 一般简写s即可
{pattern}
用来匹配的正则表达式
{string}
用来替换的内容
支持正则表达式的子匹配
\0匹配到的字符串\1第一个子匹配\2第二个子匹配…以此类推\r换行\bbackspace\ttable\\\
[flags]
Options
cconfirm, 每个匹配都可以选择替换还是不替换yyes, 替换llast, 替换并退出nnext, 跳过aall, 替换此次和后面所有qquit, 退出
g对行内所有匹配, 如果没有这个标志, 默认只替换行内匹配的第一个iignore 忽略大小写I不忽略大小写n不进行替换, 只显示匹配成功的次数pprint, 显示最后一次匹配的行#类似p, 同时显示行号llist, 类似p, 但显示方式类似于:list
[count]
替换的行数
默认为一行
如果[range]省略, 连光标那一行往下一共[count]行的范围
否则是[range]最后一行往下一共[count]行的范围