在熟悉 Vim 基本的 yy (yank current line) 和 p (paste) 的操作前提下,如果现在 Vim 中批量的移动某一些行,或者批量的复制从第 50 行到100 行到第200行后面,以我们之前的知识,可以先跳转到第 50 行 (:50),然后进入 行选择模式 (V) ,往下选择 50 行 (50j),然后再对选中的 50 行进行复制操作 (y),然后再移动到 200 行 (:200) 粘贴 (p)。

计算一下,从选择到复制,上面的操作可以划分为 5 个步骤,需要敲击 :50V50jy:200p ,当然上面的例子只是一个极端的例子,一般这样的需求也不大可能会出现。而如果有命令可以直接拷贝某些行,那么就不需要这么复杂,Vim 提供了整行的复制和移动命令。

:[range]copy {address}

copy 命令, range 表示拷贝的范围,行号范围, address 表示要拷贝到的地方,比如上面的例子就可以使用 :50,100copy200 来完成。

copy 命令可以简写成 :co 或者 :t

几个常用的格式:

:t5   拷贝当前行到第5行的下一行
:t.   拷贝当前行到光标下一行,相当于 `Yp` 或者 `yyp`
:t$   拷贝当前行到文件最后一行
:'<,'>t0   拷贝选取的区域到文件开头,在 Visual 模式下选中文本,输入 `:`,再输入 `t0`

move 命令也和 copy 一样

:[range]m[ove] {address}	

这里只是将拷贝,换为移动。

可以通过 :help copy:help move 来查看帮助

快速选择行

遇到一个操作,比如在一个非常大的文件中,需要快速的选择 1000 行到 4500 行,那么可以用下面的方法快速选择。

方法一

  • 使用 :1000 快速移动到 1000 行
  • 行选择 V4500G 快速从当前行选择到 4500 行(包括)

G Goto line [count]

方法二

  • 使用 :1000 移动到 1000 行,然后按下 m + a,标记 a
  • 然后 :4500 移动到 4500 行,按下 V + \` + a 选择

方法三

  • 使用 :1000 移动到 1000 行,然后按下 V
  • 然后输入 3500j 向下移动 3500 行