Vim 文本查找/替换
Vim 文本查找/替换
- Vim 查找
- Vim 替换
- 单行替换首个old
- 单行替换全部的old
- 多行替换首个old
- 多行替换全部old
- 全局替换
- 确认替换
Vim 查找
在Vim编辑器下进入底行模式(命令模式),输入/word
点击回车键开始查找内容;并使用n
查找下一个,N
查找上一个
Vim 替换
单行替换首个old
在Vim下使用:s/old/new
命令可以替换当前行的第一个old
,比如:
abcdabcd
我对以上命令使用:s/a/123
点击回车后,上述文本会变为:
123bcdabcd
单行替换全部的old
只会替换第一个a
,第二个a
不发生改变,若是我想同时改变本行所有的a
,则需要在末尾加个g
。
同样,对abcdabcd
执行:s/a/123/g
之后,内容将会变为
123bcd123bcd
多行替换首个old
但是这样只能替换光标所在行的内容,要是想多行替换甚至全局替换,该如何操作呢?只需要在替换前面加上范围就可以,如下所示:
对接下来的例子对以下文本进行操作(在底行模式下输入:set nu
可以显示行号):
1 abcdabcd
2 abcd
3 abcdabcdabcd
4 abcd
执行命令:2,3 s/a/123
(替换第二行到第三行的第一个a为123),会得到如下结果
1 abcdabcd
2 123bcd
3 123bcdabcdabcd
4 abcd
可以看到第一个a变成了123
多行替换全部old
如果想替换第二行与第三行全部的a的话,只需要再加一个g
就可以(:2,3 s/a/123/g
),得到如下结果
1 abcdabcd
2 123bcd
3 123bcd123bcd123bcd
4 abcd
可以看到第二行第三行的a
全部变成了123
全局替换
全局替换与多行替换一致,只不过冒号后面的范围要改成第一行与最后一行,通过:set nu
可以查看行号,但是若是有非常多的行则很麻烦,所以可以使用%
直接表示全文,或者使用$
表示最后一行,所以以下两种方式都是可以的:
:% s/a/123/g # 表示全文替换
:1,$ s/a/123/g # 表示从第一行到最后一行替换(也是全文替换的效果,但是更加灵活)
确认替换
在命令后面加上c
会跳出确认替换的样式,比如
:s/a/123/c
:s/a/123/gc