持续创作,加速成长!这是我参与「掘金日新计划 · 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 | 插入一个制表符 |
\ | 插入一个反斜杠 |
实际功能演示
下面我们来实际看一下几个命令介绍。具体操作我们可以私下练习下加深记忆。
- 设置查找替换高亮,方便我们观看。
:set hlsearch
- 用 x 字符替换 y 字符,并且只替换当前行的第一个匹配;
:s/x/y
- 用 x 字符替换 y 字符,并且替换当前行的所有匹配字符串:
:s/x/y/g
- 用 x 字符替换 y 字符,并且替换全文所有匹配的地方:
:%s/x/y/g
- 使用
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 | 向下翻滚屏幕 |
- 查看当前匹配的行数。
:%s/x/y/gn
参考文档
- 《Vim实用技巧》—— [英]Drew Neil