vim 实栗 (1) :替换重复文本

今儿开始,又一个新坑:vim 实栗。这个系列主要目的是围绕特定的主题,在 vim 实际操作一下。如果你有好的建议,或者有更好的办法,一定要分享一下。

这一篇咱们就来说一下怎么替换重复文本

visual-block 替换

如果我们要替换的文本都 “互相挨着”,能用一个长方形框住的话,那我们就可以直接用 visual-block 模式来解决了。比如下图里,我们想把所有的 print(a + b + c) 变成 assert (这里主要是为了说明怎么替换,代码究竟能不能跑这里就先忽略了)

  • 按下 <c-e> (ctrl + e) 进入 visual-block mode
  • 然后 6je 选中文本
  • 按下 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 这个插件来做文本替换,只不过我目前还没用过,就不在这里给大家献丑啦…

VZJ wechat
欢迎您扫一扫上面的二维码,订阅 V 字君的微信公众号。