在vim中剪切和粘贴多行

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

在我以前的Linux设置(这是偷来的,所以我不知道版本),我可以多次input“dd”,然后“p”会把所有的回来。 例如:键入:“dd dd”,两行将被删除。 现在input“p”, 行都被粘贴回缓冲区。

我知道我可以通过input“2dd”,然后“p”来完成我想要的function,但是我希望能够在不计算提前行数的情况下“dd”输出行。

有任何想法吗?

你有没有考虑使用视觉模式 ?

你可以去:

  • V
  • select你想要切割的所有东西而不用计算
  • d
  • 去你想要粘贴的地方
  • p

这应该会产生大约是dd方法的一半的键击,因为你每行按一个键而不是两个键。 如果您使用5j (或类似的)一次select多行,则5j奖励积分。

你可以input:

 d<n>d 

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

 p 

例如,要剪切并粘贴3行:

 d3d p 

不知道这是否足够接近你正在尝试,但你可以做的一件事是使用特定的注册,并大写你的注册名称。 这告诉vim追加到寄存器,而不是取代它,所以如果你有线:

 one two three 

你可以进入

 "qdd "Qdd "Qdd 

然后如果你进入

 "qp 

它会粘贴回原来的线

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

 :x,yd 

或者如果你的光标已经在第x行,那么

 :,yd 

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

我同意@Ben S.这是实现这个目标的首选方法,但如果你只是想复制旧的行为,你可以重新映射dd来追加到指定的寄存器,然后映射p从该寄存器粘贴并清除它。
这样做的缺点是导致p只能使用dd删除的东西(使用d}删除到段落的末尾,不会把文本放到正确的寄存器中以后粘贴)。

添加以下到您的vimrc

 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 

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

 noremap p "dp "Paste from register d 

但是这会导致该registry增长,而没有清理出来