多次粘贴

问题描述 投票:0回答:8

用剪贴板的内容替换多行的最佳方法是什么?

我遇到的问题是,当我拉动一行并将其粘贴到另一行上时,“拉动”会被我刚刚替换的行替换。现在,如果我想用同一行替换另一行,我必须返回并再次拉动它。

必须有更好的方法来做到这一点。

vim copy paste
8个回答
136
投票

我的

.vimrc
里有这个:

xnoremap p pgvy

(注意:这仅适用于默认寄存器,但此映射很容易记住)。编写更详细的版本是可能的。

此外,您还可以按 P (Shift+p) 而不是 p 粘贴所选内容而不覆盖剪贴板。


32
投票

"0
应该包含您复制的内容。打字有点乏味,但
"0p
应该可以做你想做的事。

或者,不要预先选择并替换旧行。如果您通过搜索找到这些行,只需一遍又一遍地点击

n.
(在最初的
p
之后),然后当它们全部粘贴后,执行
ndd
,然后根据需要添加尽可能多的
n.

在迁移到 Vim 时,我需要做出的最大的心理转变是弄清楚如何按顺序应用组编辑。 IE。我不会在一行上进行一堆编辑,然后在另一行上进行一堆相同的编辑,而是对一堆行进行第一次编辑(使用

.
达到很好的效果),然后在或者,使用宏可能会有所帮助,因为它们非常棒,但有时要正确处理“复杂”的更改会有点乏味。


16
投票

我经常使用另一个注册表,将您需要的行复制到某个命名的注册表

"ay
,然后从那里粘贴
"ap


14
投票

当您在 Vim 中粘贴所选内容时,它将用所选内容替换默认寄存器。如果粘贴选择内容会清除剪贴板寄存器的内容,那么您的 .vimrc 中很可能有以下行

set clipboard=unnamed

一种选择是删除它并使用显式剪贴板寄存器

"+

另一种选择是使用任何其他显式命名的寄存器 (a-z)。第一次粘贴后,将线拉回到

"c
中,然后使用
"cp
从那里粘贴出来。


10
投票

通常最好使用文本对象命令(例如

ciw
)来更改内部单词,而不是使用复制/粘贴。此方法的优点是可以使用
.
重复命令轻松重复。

  1. yiw
    复制内部单词(复制光标下的单词,说“第一个”)。
  2. ...将光标移至另一个单词(例如“第二”)。
  3. ciw<C-r>0
    更改“第二”,将其替换为“第一”(是 Ctrl-R)。
  4. ...将光标移至另一个单词(例如“第三”)。
  5. .
    更改“第三”,将其替换为“第一”。

8
投票

使用

np
,其中
n
是您要粘贴线条的时间数,例如
3p
将粘贴 3 行。


5
投票

在 2023 年,您可以使用

P
代替
p
,这将允许您继续粘贴“猛拉”的选择。


1
投票

添加以下键映射,点击 Ctrlp 进行粘贴。

" Paste Register 0  
map <C-p> "0p
© www.soinside.com 2019 - 2024. All rights reserved.