2
日期作者版本备注
2020-11-26dingbinv1.0

vim是几乎所有程序员日常coding必用工具,甚至是很多非程序员同学日常文本编辑必用工具。如何提高vim编辑文本或代码效率,是很多程序员非常关心的事情。今天跟大家分享一个很多人不知道的vim块操作技巧,尤其是vim的%V块内替换技巧,可极大提高代码编写效率。

下面按照块选择、块首末位置切换、块前块后插入、%V块内替换、块删除块剪切块复制、块覆盖几个部分分别展开讲述。

1.vim 块选择

vim块选择也属于可视化选择的一种,字符选择、行选择也是常用的可视化选择方式,下面讲块选择之前简单讲一下这两种选择

按v键进入字符选择模式,接着按hjkl键光标依次往左下上右方向移动
image
:nohl 消除所有高亮显示
image

按V键(shift+v)进入行选择模式,接着按hjkl键光标依次往左下上右方向移动
image

按ctrl+v进入块选择模式,接着按hjkl键光标依次往左下上右方向移动,以一个方块的形状执行选择文本
image

2.vim 块首末位置切换

在按下ctrl+v键进行块选择后,按下o键可以在被选择方块的首位置和末尾位置 2个位置之间轮流切换。切换到新位置后,可以重新基于当前位置再按下hjkl依次左下上右移动调整选择块的范围。
image

3.vim 块前、块后插入

选择好文本块之后,按下大写I键(实际是按下shift+小写i键),即可进入块前插入状态,接着键入想插入的文本,结束后按两次esc键,即可看到整个被选择块每列之前都被插入了相同的字符。
image
image
image

块后插入与块前插入类似,不同的是进入块后插入状态需要按下大写A键(实际操作是按下shift+小写a键),同样操作后,可实现在被选择块后方插入文本。
image

4.vim %V块内替换

本文的重点来了:%V块内替换。
%V块内替换是非常巧妙的操作,实际中也很有用。而且估计绝大部分的人都不知道这一技巧。如下图所示,我想把下图中目前高亮部分的1都替换成0,最终我想达到的预期目标是将cent7a cent7b cent7c 3个主机的ip分别改为192.168.0.010,192.168.0.011和192.168.0.012。
image

如何操作呢?我可以这么操作:先ctrl+v块选择了上图中的范围后,按下冒号键(实际操作按下的是shift+;键),进入命令模式如下图所示:
image
接下来我在出现的:'<,'>后面直接输入s/1/0/g,按回车后,效果如下图:
image
我们发现替换了3行,14次替换。原来操作还是把我们选择的块所在的3行所有符合替换条件的文本都替换了。这是行选择替换,不是我们想要的预期效果。那如何操作呢? 高级操作来了,vim支持一个%V的可视化选择块范围内替换。具体操作步骤如下:

1) ctrl+v块选择想要执行块内替换操作的目标块范围
image
2)按下冒号键(实际操作按下的是shift+;键),进入命令模式,命令号会出现:'<,'>等待输入
image
3)在vim命令行出现的:'<,'>后面键入s/%V1/0/g,按下回车即可,效果如下第二幅图,可见只发生3行3次替换,确实是块内替换。
image
image

注意:

  • 有的时候,在vim命令行出现的:'<,'>后面键入s/%V1%V/0/g也可以,用%V在前后将某个待替换文本串包起来,即可实现在块内替换。
  • 在Jebrains系列的IDE工具如Idea、Clion、Pycharm等的vim插件(用这些IDE你一定要用这些vim插件,可以极大提高你编码效率!)IdeaVim中,截止目前并不支持vim的%V可视化块内替换功能。怎么办呢? 一个曲线救国替代的方法是:先通过快复制方式把待替换目标块复制到 附近上下的空行上,然后这几行上执行行替换,完成后再同样块复制回原块位置再替换回去。
  • 在vim命令行中键入:h %V可以看到%V的介绍。

image

5.vim 块删除、块剪切、快复制

块删除和块剪切、块复制都很简单,ctrl+v选择块后,按下d删除块,或者按下x剪切了块,或者按下y键复制该块。

6.vim 块覆盖

块覆盖指的是在一个地方通过块复制或块剪切方式得到块a的副本,然后在另一个地方再次块选择一个块b的方位,然后按下p键,即可实现用块a内容覆盖块b内容。


apollo008
151 声望9 粉丝

走完这一生,如果我和你在一起会变得更好,那我们就在一起,否则我就丢下你。我回顾我最光辉的时刻就是和不同的人在一起,变得更好的最长连续时刻。