今儿开始,又一个新坑:vim 实栗。这个系列主要目的是围绕特定的主题,在 vim 实际操作一下。如果你有好的建议,或者有更好的办法,一定要分享一下。
这一篇咱们就来说一下怎么替换重复文本
visual-block 替换
如果我们要替换的文本都 “互相挨着”,能用一个长方形框住的话,那我们就可以直接用 visual-block
模式来解决了。比如下图里,我们想把所有的 print(a + b + c)
变成 assert
(这里主要是为了说明怎么替换,代码究竟能不能跑这里就先忽略了)

- 按下
<c-e>
(ctrl + e) 进入visual-block mode
- 然后
6j
和e
选中文本

- 按下
s
替换所选文本并进入输入模式 - 输入
assert
之后,按下<ESC>
回到 普通模式

使用命令行
如果我们要替换的文本并不 “挨着”,比如下图

我们可以直接使用 vim 的 :substitute
命令来完成,具体命令如下:
:%s/print/assert/g
意思是
- 在全文件之内
%
,作如下替换s
- 将
print
换成assert
:/print/assert
- 模式为 global,即替换所有
print
:/g

如果我们只想替换第一个和最后一个 print
,我们可以这么操作
:%s/print/assert/c
意思是
- 在全文件之内
%
,作如下替换s
- 将
print
换成assert
:/print/assert
- 模式为 confirm,即需要使用者确认是否替换文本:
/c
y
确认替换,n
代表不替换

搜索-替换
也可以用搜索然后替换的方式来处理。为了显示方便,我们先设置
set hlsearch
高亮搜索文本
然后这么操作:
- 按下
/print
搜索print

- 通过
ciw
替换文本然后回到普通模式

- 在普通模式下按
n
光标就会重复刚才的搜索,跳到下一个print
处。如果不需要替换,可以再按n
(按下大写的N
则是跳到上一个print
处)。 - 如果每次替换成的文本都一样,比如都是替换成
assert
的话,根本不用重复输入,我们直接按下.
就可以了。

相关理论可以参考 这一篇 的 “搜索” 部分。
使用插件:vim-multiple-cursors
我们还可以用这个插件来解决:vim-multiple-cursors
。 如果你不直达如何安装插件的话,可以先参考这一篇: vim-plug 。如果使用这个插件的话,可以直接想 sublime text
一样选中想要替换的文本,然后直接替换。比如还是这个例子

有兴趣的小伙伴可以去研究一下这个插件,有必要的话,咱单写一篇说这个插件就成

除了这个应该还可以用 far.vim 这个插件来做文本替换,只不过我目前还没用过,就不在这里给大家献丑啦…