在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增长,而没有清理出来