我在Mac 10.7.2上运行vim 7.3并且在切割和粘贴多行时遇到一些问题。
在我的旧Linux设置(被盗,所以我不知道版本),我可以多次键入“dd”然后“p”将所有这些都拉回来。例如:键入:“dd dd”,将删除两行。现在输入“p”并将两条行粘贴回缓冲区。
我知道我可以通过键入“2dd”,然后输入“p”来完成我想要的操作 - 但我希望能够“dd” - 输出行而不提前计算行数。
有什么想法吗?
答案 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
(光标位于要粘贴的行上)