vim中替换特定行范围文本需用行号范围加s命令,如:5,10 s/old/new/g;支持标记('a,'b)和可视模式(:'

在 vim 中替换特定行范围内的文本,核心是用 行号范围 + s 命令,而不是全局替换。只要指定起始行和结束行,就能精准操作,避免误改其他内容。
指定行号范围进行替换
语法为::start_line,end_line s/原文本/新文本/[flags]。例如把第5行到第10行中所有的 old 替换为 new:
-
:5,10 s/old/new/g(g表示当前行内全部替换) -
:5,10 s/old/new/(不加g只替换每行第一个匹配) -
:5,10 s/old/new/gc(c表示逐个确认,安全修改常用)
用符号标记代替行号,更灵活
先用 ma、mb 等命令给两行打标记,再用 'a,'b 引用范围:
- 光标移到起始行,输入
ma;移到结束行,输入mb - 执行
:'a,'b s/foo/bar/gc,即可在标记区间内交互式替换 - 标记名可用 a–z,小写为行级标记(只记行号),大写为文件级标记(含列位置)
结合视觉选择快速确定范围
进入可视模式选中目标区域后,按 :,vim 自动补全为 :',此时直接输入替换命令即可:
- 按
V进入行选择模式,上下移动选中多行 - 松开后按
:,看到:'提示,输入s/xxx/yyy/gc - 注意:
' 和 <code>'>是 vim 自动记录的可视选区起止位置
常见注意事项
替换时容易忽略但影响结果的细节:
- 行号范围包含首尾两行,
:3,3就是只操作第3行 - 用
%表示全文(等价于:1,$),不是“百分比”含义 - 正则特殊字符如
.、*、/需转义,或改用其他分隔符,例如:1,5 s|/path|/newpath|g - 替换失败时检查是否漏了
s命令前的冒号,或原字符串不存在


















