Vim 进阶学习(十一)—— 替换命令介绍

74 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

substitute 命令介绍

substitute 命令允许我们先查找一段文本,再用另一段文本将其替换掉。该命令语法如下所示:

:[range]s[ubstitute]/{pattern}/{string}/[flags]

其中标志位功能如下:

flag作用
g使得 substitute 命令可在全局范围内执行,即可以修改一行内的所有匹配,而不仅仅是第一处匹配。
c让我们有机会可以确认或拒绝每一处修改。
n抑制正常的替换行为,即让 Vim 不执行替换操作,而只是报告本次 substitute 命令匹配的个数。
e用于屏蔽这些错误提示。
&用于指示 Vim 重用上一次 substitute 命令所用过的标志位。

替换域中会存在一些特殊字符,通过查询 :h sub-replace-special,我们可以找到完成的列表,下面我们列举一部分常用符号:

符号描述
\r插入一个换行符
\t插入一个制表符
\插入一个反斜杠

实际功能演示

下面我们来实际看一下几个命令介绍。具体操作我们可以私下练习下加深记忆。

  1. 设置查找替换高亮,方便我们观看。
:set hlsearch
  1. 用 x 字符替换 y 字符,并且只替换当前行的第一个匹配;
:s/x/y
  1. 用 x 字符替换 y 字符,并且替换当前行的所有匹配字符串:
:s/x/y/g
  1. 用 x 字符替换 y 字符,并且替换全文所有匹配的地方:
:%s/x/y/g
  1. 使用 c 标志位手动控制每一次替换操作。vim 会对每处匹配结果提示“替换为 x?”,我们可以按 y键,完成这次修改,或者按 n 键,跳过这一次修改。
:%s/x/y/gc

当然回答的提示不止上述两种,实际上,Vim 会体贴地为我们提示所有的选项“y/n/a/q/l/^E/^Y”。下表展示了每种答案的含义:

按键用途
y替换此处匹配
n忽略此处匹配
q退出替换过程
l"last" —— 替换此处匹配后退出
a"all" —— 替换此处与之后所有的匹配
Ctrl-e向上翻滚屏幕
Ctrl-y向下翻滚屏幕
  1. 查看当前匹配的行数。
:%s/x/y/gn

参考文档

  • 《Vim实用技巧》—— [英]Drew Neil

往期文章