[vim] 块选择 (Visual Block)

时间:2021-01-07 19:17:10

前言

则才我们提到的简单的vi操作过程中,几乎提到的都是以行为单位的操作。那么如果我想要搞定的是一个块范围呢?举例来说,像下面这种格式的文件:

192.168.1.1 host1.class.net
192.168.1.2 host2.class.net
192.168.1.3 host3.class.net
192.168.1.4 host4.class.net
...

假设我想要将host1, host2等复制起来,并且加到每一行的后面,也即每一行的结果要是
“192.168.1.2 host2.class.net host2”
这样的情况时,一般编辑器似乎不容易达到这个需求,但是咱们的vim是可以的。那就是使用块选择(Visual Block)。当我们按下v或V或者[Ctrl] + v时,这个时候光标移动过的地方就会开始反白,这三个按键的意义如下表如示

按键 意义
v(小写) 字符选择,会将光标经过的地方反白选择
V(大写) 行选择,会将光标经过的行反白选择
[Ctrl]+v|块选择,可以用长方形的方式选择数据
y 将反白的地主复制
d 将反折的地方删除

举例

下面实际进行我们需要的操作。就是将host再加到每一行的最后面,我们可以这样作:

  1. 将光标移动到第一行的host那个h上头,然后按下[Ctrl]+v,左下角出现块示意
    [vim] 块选择 (Visual Block)
  2. 将光标移动到最底部,此时光标移动过的区域会反白
    [vim] 块选择 (Visual Block)
  3. 此时可以按下”y”来进行复制,当你按下y之后,反白的块就会消失不见。
  4. 最后,将光标移到到第一行的最右边,并且再用编辑模式向右按两个空格键,回到一般模式后,再按”p”后,你会发现很有趣
    [vim] 块选择 (Visual Block)

通过上述的功能,你可复制一个块,并且是贴在某个“块的范围”内,而不是以行为单位来处理你的整份文件。这玩意儿是非常有帮助的,至少在进行排列整齐的文本文件中复制/删除块时,会是一个非学棒的功能。

参考文献

《鸟哥的私房菜-基础学习篇》