Vim 进阶学习(五)—— 替换模式

313 阅读3分钟

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

使用替换模式替换已有文本

文本替换是一个很常见的操作,在日常工作中我们可能进场会出现替换一个单词,替换个大小写的需求。比如我们的某个单词写错,修改某个数值,等等,这时就要善用替换模式。

相比于 “进入插入模式-删除-插入” 来说,替换模式能显著提升我们的效率。

替换模式一定要善用 r 和 R 命令

我们以一段简单的代码为例,一个常量,定义 RPC 单批次请求数量:

const RpcOnceQueryCountThirty = 30

假设现在我们有个需求,需要将数量从 30 提升到 50,这个时候我们改动就比较简单,将光标移到 3 的位置,然后输入 r 命令,输入 5,就直接替换了。

如果我们需要将数量从 30 提升到 100 呢,由于 r 命令只能替换单个字符,那么我们如何替换所以字符呢?不要着急,也并不需要切换到插入模式,我们只需要输入 R 命令,然后输入 100 即可。大写 R 命令允许替换多个字符。

虚拟替换模式替换制表符

上面我们介绍了普通字符的替换,然后某些字符会使替换模式变得复杂化。

我们以制表符为例,在文件中制表符以单个字符表示,但是在屏幕上它却会占据若干列的宽度,这个宽度由“tabstop”设置决定。如果我们把贯标移到制表符上,然后进入替换模式,那么我们所输入的下一个字符将会替换制表符。假设“tabstop”选项设置为 8(默认值),那么该操作的结果就是把 8 个字符替换成了一个字符,这将大幅缩短当前行的长度。

我们以一个带制表符的文本为例,文本如下:

        There is a TAB at the beginning of the paragraph

然后我们输入 r* 命令,即用 * 替换制表符,我们来看看效果(8 个字符变为 1 个字符):

*There is a TAB at the beginning of the paragraph

对于 Vim 来说,还有另外一种替换模式,即 虚拟替换模式(Virtual Replace Mode) 。该模式可由 gR 命令触发,他会把制表符当做一组空格进行处理。

假设我们把光标移到一个占屏幕 8 列宽的制表符上,然后切换到虚拟替换模式,在输入前 7 个字符时,每个字符都会被插入到制表符之前;最后,当输入了第 8 个字符时,该字符将会替换制表符。

在虚拟替换模式中,我们是按屏幕上实际显示的宽度来替换字符的,而不是按文件中所保存的字符进行替换。这会减少意外情况的发生,因此建议在可能的情况下尽量使用虚拟替换模式

Vim 也提供了单次版本的替换模式及虚拟替换模式。r{char} 和 gr{char} 命令允许我们覆盖一个字符,之后马上又回到普通模式。

参考文档

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

往期文章