当用命令 d 或 x 删除了一段文字后,被删除的文字就自动被 vim 保存到了一个特殊的剪切板中。之后可以用 p 命令(put)将其粘贴到光标所在的位置的后面。
大家可以试试依次输入下面两条命令:
dd
p
这两条命令执行下来相当于将两行内容调换了位置,类似下面的命令
x
p
将两个字母颠倒了位置。
p 命令同样可以在前面加上个数字,表示重复粘贴 n 次。
有时,我们要删除一个大的文本块,直接用d命令很难描述这个文本块的开始和结束。这时可以用 m 命令(mark)在文本中做个标记。还是举个具体的例子。比如有如下的文本:
int main(void)
{
double x = 1e-2;
double y[5];
y[0] = gsl_log1p(x);
y[1] = log1p(x);
y[2] = log1p2(x);
y[3] = log1p3(x);
y[4] = log(1+x);
printf("gsl_log1p = %.15e\n", y[0]);
printf("log1p = %.15e\n", y[1]);
printf("log1p2 = %.15e\n", y[2]);
printf("log1p3 = %.15e\n", y[3]);
printf("log(1+x) = %.15e\n", y[4]);
return 0;
}
想要将几条printf 语句都删除掉。先将光标移动到第一个printf语句的第一个字符p处。执行命令 ma 。其中的 a 是给这个标签命的名字,命名的规则与 q 命令相同。然后将光标移动到 return 语句的 第一个字符 r。输入命令 d`a。可以看到几行 printf 语句都被删除了。
`a 表示做标记的位置
‘a 表示标记所在的行的开始位置
当我们在一篇文章中做了多个标记后,可能我们自己都记不清那些标记都放到了哪里。这时可以用下面的命令显示出所有的标记。
:marks
可以看到,除了我们定义的标记,还多了许多系统自定义的标记。他们的含义以后在介绍。
Vim 中称复制操作为 yank。对应的命令是 y。
y 命令与d 命令相似,只是它不删除所选的区域。