vim替换
Vim提供了多种灵活的替换命令变体,以下是主要的替换命令变体总结:
Vim替换命令的常用变体
1. 基本格式
:[range]s/{pattern}/{string}/[flags]
2. 范围(range)变体
| 范围表示 | 说明 |
|---|---|
| 无 | 默认当前行 |
. |
光标所在行 |
1 |
第一行 |
$ |
最后一行 |
33 |
第33行 |
'a |
标记a所在行 |
.+1 |
当前行的下一行 |
$-1 |
倒数第二行 |
22,33 |
第22到33行 |
1,. |
第1行到当前行 |
.,$ |
当前行到最后一行 |
'a,'b |
标记a到标记b的行 |
% |
整个文件(等同于1,$) |
3. 替换标志(flags)变体
| 标志 | 说明 |
|---|---|
| 无 | 只替换每行第一个匹配项 |
g |
全局替换,替换所有匹配项 |
c |
确认替换,替换前询问用户 |
i |
忽略大小写 |
e |
忽略执行过程中的错误 |
4. 常用替换命令变体
全文替换
:%s/pattern/string/g:全文替换所有匹配项:g/pattern/s//string/g:等同于上一个命令:%s/pattern/string/gc:替换前确认:%s/pattern/string/gi:不区分大小写替换
当前行替换
:s/pattern/string/g:当前行所有匹配项:.s/pattern/string/g:当前行所有匹配项
指定行范围替换
:n,m s/pattern/string/g:第n行到m行:1,10 s/pattern/string/g:第1到10行:.,$ s/pattern/string/g:当前行到文件末尾:%s/pattern/string/g:全文替换(等同于1,$)
使用其他分隔符
:s#pattern#string#g:使用#作为分隔符(避免/冲突):%s+pattern+string+g:使用+作为分隔符:s@pattern@string@g:使用@作为分隔符
5. 特殊替换场景
行首/行尾替换
:%s/^/prefix/:在每行开头添加前缀:%s/$/suffix/:在每行结尾添加后缀:%s/ *$//:删除行尾空格
精确匹配单词
:%s/\<pattern\>/string/g:精确匹配单词(避免匹配部分匹配)
删除Windows换行符
:%s/^V^M//g:在Vim中删除^M(实际输入时需用Ctrl+V+Ctrl+M)
6. 其他相关命令
r:替换光标所在字符(单个字符替换,无需进入插入模式)R:进入替换模式,可连续替换多个字符c:修改命令(进入插入模式,与替换不同)
示例
-
全文替换"Vim"为"vim"并确认:
:%s/Vim/vim/gc -
将当前行的"line"替换为"lines":
:s/line/lines/g -
将第2行到第10行的"line"替换为"lines":
:2,10s/line/lines/g -
在行首添加注释符号:
:%s/^/\/\/ /g -
使用#作为分隔符避免/冲突:
:s#vivian/#sky/#g
这些替换命令变体使Vim成为强大的文本处理工具,能够高效地进行批量文本修改。
其他样例
Vim替换命令的完整格式为:[range]s/{pattern}/{string}/[flags]。全局替换时,range使用%代表整个文件,例如:
:%s/foo/bar/g:将文件中所有foo替换为bar。
g(全局)标志:不加g时仅替换每行第一个匹配项,添加后替换所有匹配项。
c(确认)标志:添加c后,每次替换前会提示确认(y替换、n跳过、a替换全部),避免误操作。
- 指定行范围: 替换部分内容时,用行号或百分比定义范围:
10,20s/old/new/g:替换第10至20行。.,$s/old/new/g:替换从当前行到文件末尾。
- 正则表达式支持: Vim支持正则表达式,实现复杂匹配:
%s/\<foo\\u003e/bar/g:精确匹配单词foo(避免匹配foobar)。
注:在计算机编程中,\u003e 是一个 Unicode 转义序列,表示大于号(>)字符
%s/$\d\{3\}$-$\d\{3\}$-$\d\{4\}$/(\1) \2-\3/g:格式化电话号码。
- 特殊字符处理: 若old或new含/等特殊字符,需转义(如/)或改用其他分隔符(如#):
s#a/b#c/d#:以#为分隔符替换路径。
-
使用正向预查进行搜索
在Vim中使用正向预查进行搜索,你可以使用\zs和\ze这两个特殊序列。
\zs表示匹配的起始位置,从这里开始才是真正的匹配结果。
\ze表示匹配的结束位置,匹配到此位置结束。
例如,假设你想找到所有以is结尾的单词,但不包括is部分:/\<word\zs\w*is\ze\>这里,
\<和\>是单词边界的锚点,\zs标记了真正想捕获的起始位置(即单词的开始),而\ze标记了匹配的结束位置(即is的前一个字符)。 -
g命令
g&在所有行上重复前次的:s
ga打印ASCII码

浙公网安备 33010602011771号