在vim中剪切并粘贴多行

时间:2012-01-24 00:05:54

标签: vim

我在Mac 10.7.2上运行vim 7.3并且在切割和粘贴多行时遇到一些问题。

在我的旧Linux设置(被盗,所以我不知道版本),我可以多次键入“dd”然后“p”将所有这些都拉回来。例如:键入:“dd dd”,将删除两行。现在输入“p”并将两条行粘贴回缓冲区。

我知道我可以通过键入“2dd”,然后输入“p”来完成我想要的操作 - 但我希望能够“dd” - 输出行而不提前计算行数。

有什么想法吗?

6 个答案:

答案 0 :(得分:92)

您是否考虑过使用visual mode

你可以去:

  • V
  • 选择您要剪切的所有内容而不计算
  • d
  • 转到要粘贴的位置
  • p

由于您每行按一个键而不是两个键,因此这应该产生与dd方法一样多的键击次数。如果您使用5j(或类似)一次选择多行,则可获得奖励积分。

答案 1 :(得分:24)

您可以输入:

d<n>d

其中<n>是您要剪切的行数,然后您可以将它们粘贴为:

p

例如,剪切和粘贴3行:

d3d
p

答案 2 :(得分:7)

按行号剪切和粘贴(执行:set number以查看行号),对于行x到y执行:

:x,yd

或者如果光标已经在x行,请执行

:,yd

然后转到要粘贴的位置,然后按p

答案 3 :(得分:5)

不确定这是否足够接近您正在尝试的内容,但您可以做的一件事是使用特定的寄存器,并将您的注册名称大写。这告诉vim要附加到寄存器而不是替换它,所以如果你有这些行:

one
two
three

你可以输入

"qdd
"Qdd
"Qdd

然后如果你输入

"qp

它将粘贴原始行

答案 4 :(得分:1)

我同意@Ben S.这是实现此目的的首选方法,但如果您只想复制旧行为,则可以重新映射dd以附加到指定的寄存器,然后映射{{ 1}}从该寄存器粘贴并清除它。
这样做的缺点是p只能处理使用dd删除的内容(使用p删除到段落的末尾不会将文本放在正确的寄存器中以便稍后粘贴)。

将以下内容添加到vimrc

d}

如果您不想粘贴清除寄存器的内容

noremap dd "Ddd             "Appends the contents of the current line into register d
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out

但这会导致该寄存器增长而不会将其清除

答案 5 :(得分:0)

要复制和粘贴 4 行:

y4y(光标在要复制的起始行)

p(光标位于要粘贴的行上)