gvim 命令行粘贴_vim-如何在光标所在的行中粘贴?

vim-如何在光标所在的行中粘贴?

命令p粘贴在光标下方,P粘贴在光标上方。 粘贴到光标所在行的命令是什么?

10个解决方案

36 votes

这完全取决于您要粘贴的寄存器中的数据类型。 如果数据是面向行的数据(例如,用yy选中),则将其粘贴为光标上方或下方的整行。 如果数据是面向字符的(例如用y2w选中),则将其粘贴在当前行中光标位置处或之前。

有关寄存器类型和put命令之间的交互的更多信息,请参见:help linewise-register。

Randy Morris answered 2020-02-10T11:56:24Z

17 votes

gvim中的“编辑”菜单列出了以下内容:

粘贴=“ + gP

放在之前= [p

放后=] p

如果在Windows中运行vim,则可以执行以下操作以使Ctrl + C和Ctrl + V正常运行:

source $VIMRUNTIME/mswin.vim

behave mswin

Matthew Strawbridge answered 2020-02-10T11:57:02Z

8 votes

如果要保持当前行不变,请在行上方或下方粘贴。

如果要覆盖当前行,则必须先将其删除,这意味着以下行将取代它,然后粘贴到新的当前行上方。

有多种方法可以做到这一点:

"a

"a删除“黑洞寄存器”中的整个当前行,现在下面的行是当前行。

"a将未命名寄存器的内容放在当前行上方。

"a

"a使您进入可视行模式,并直观地选择整个当前行

"a用未命名寄存器的内容替换选择

"a

"a删除当前行的内容并将您置于INSERT模式

"a放入未命名寄存器的内容

最后两个选项有一个有趣的副作用:前一行的内容放入未命名的寄存器中,这使得无法对相同内容进行多次粘贴。

幸运的是,您可以解决这种情况:

第一个解决方案中提到的“黑洞寄存器”有效,就像黑洞一样。 无论您输入什么内容,它都会永远消失,因此您可以继续使用"a和P,并确信该未命名的寄存器在粘贴之间仍然相同。

Vim使您可以访问26个字母寄存器,可用于保存宏或重复粘贴内容。

以第二种解决方案为起点,首先将整行拉入寄存器"a中,其编号为"ayee,然后在另一行上执行"a。

但以上所有条件均假定您要粘贴的文本是实际的一行。 Vim区分“逐行”和“按字符”:不允许您在字符上下文或其他情况下粘贴行。

用"ayee重整行将保持其行方向或字符方向,并且您将无法在同一行的两个字符之间进行"a。 为此,您需要确保Vim不会将您提出的内容解释为逐行的。 例如,假设您在第一行的第一个字符上,并且想拉"aP,并将其放在lorem和sit之间的正常位置:

ipsum dolor

lorem sit amet

您应该键入"ayee来将选中的文本放入寄存器"a,将光标放在需要的位置,然后键入"aP。

romainl answered 2020-02-10T11:58:49Z

2 votes

要以插入模式粘贴,只需按Control + R。 然后输入寄存器,例如 Shift ++。

要在命令模式下粘贴,请按P,但是必须确保您的行没有换行符(例如,由0v$hy选中),否则它将显示在光标上方。

与可视模式相同,请参见:如何在垂直选择块中粘贴线? 在Vim SE

kenorb answered 2020-02-10T11:59:19Z

1 votes

您可以使用D删除当前光标位置到行尾,使用p删除新光标位置。

也就是使用^ D和p剪切并粘贴整行。

vvv answered 2020-02-10T11:59:44Z

1 votes

我经常需要将注册内容“投射”到某种(字符/行/块)模式,为此我写了UnconditionalPaste插件。 它提供了gcp、gcP等替代品,以替代强制某种模式的内置粘贴命令(到目前为止,此主题还有更多变体,例如以逗号或查询的字符进行粘贴)。

使用它,您可以仅使用gcp/gcP在光标位置之后/之前粘贴,无论您如何拉动文本。

Ingo Karkat answered 2020-02-10T12:00:09Z

0 votes

我不确定是否有一个。 我尝试查找文档,并查看了以下三个文档:

Vim命令备忘单

Vim编辑器命令

掌握VI编辑器

不幸的是,这三个命令只列出了两个命令。 特别是,第三个链接指出The commands to paste are p and P...

Jeremy Wiggins answered 2020-02-10T12:00:47Z

0 votes

(我知道此线程很旧,只保留此线程,希望对您有所帮助)

受到@wbg上面有关删除换行符的评论的启发,我将它们添加到了映射中:

inoremap p :let @"=substitute(@", '\n\+$', '', '')pa

inoremap p :let @"=substitute(@", '\n\+$', '', '')pa

当我有一个包含一些SQL(逐行)的文件并且必须插入代码时,这很有用。

Sunny Pun answered 2020-02-10T12:02:21Z

0 votes

将该行分为2个要插入的位置

在他们之间粘贴部分

按此处所述将3行与j合并(在Vim中删除换行符)

可行,但乏味,不得不考虑,查找它=> vi和emacs是垃圾软件

foobariciuos answered 2020-02-10T12:02:54Z

0 votes

Shift + v将选择整行,但您不想这样做。 而是从要按字符选择的行的开头按CTRL + v,然后按$选择到行的末尾。 拉动y并粘贴p。

leedre answered 2020-02-10T12:03:15Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值