9

当我使用 CTRL-V 从(例如)在 Acrobat Reader 中打开的 PDF 将两行文本复制到 gvim 中时,文本将插入到 gvim 中我所在的行上方,而不是光标所在的位置。(场景:我想复制一个分布在两行中的文档标题并将其粘贴到 gvim 中的 html 标记之间)。

如果我对单行文本执行相同操作,则文本将正确粘贴在光标位置。

我应该怎么做才能使它也适用于两行文本(例如“粘贴不格式化”)?

重要提示:要粘贴的字符串由两行组成,由回车符(或类似的东西)分隔!

解决方案

实际上有两种有效的解决方案:

  • 使用 CTRL-R * 在光标位置粘贴(并保持剪贴板内容多行)
  • 重新映射粘贴命令以替换剪贴板字符串中的所有回车符
4

5 回答 5

12

首先,似乎 CTRL-V 被映射到某些东西,因为通常在 VIM 中粘贴不是使用 CTRL-V 完成的(CTRL-V 是可视块)。

其次,您看到的行为是标准的 vi[m] 行为,如果您拉动一整行或多行,粘贴将始终导致当前行上方或下方的一行或多行。

我不知道有任何内置方法可以实现您想要做的事情。但是你总是可以将 CTRL-V 重新映射到你想要的东西,即

:map <C-V> i<CR><Esc>"*P

之后,将在光标所在的字符之间粘贴多行,但在其他情况下,这种重新映射可能不是您想要的。

编辑

好的,我找到了另一种方法。

在插入模式下,键入

CTRL-R *

这会将剪贴板缓冲区的内容粘贴到光标所在的位置。(您也可以使用它来粘贴其他缓冲区的内容)

于 2009-09-29T12:12:23.200 回答
2

如果要在粘贴之前从寄存器中删除换行符,可以使用表达式 register "=

:map <C-v> "=substitute(@*, "\n", " ", "g")<CR>p
于 2009-09-29T20:23:37.263 回答
1

使用快捷方式pP(分别粘贴在光标之后和之前)。添加"*以指定系统寄存器的内容(Windows 剪贴板,在您的情况下),或"+(对于 UNIX)。

因此,您可以使用:

  • "*p粘贴在光标前
  • "*P粘贴在光标后
  • "*y复制(可视区域,或使用后缀告诉 Vim “复制什么”)
  • "*d剪切(视觉区域,或带有后缀)

等等。

于 2009-09-29T08:10:48.763 回答
1
:set paste

在将某些内容粘贴到缓冲区之前

:set nopaste

恢复格式化设置

于 2009-09-29T10:33:54.163 回答
0

要从 Windows 剪贴板中的光标位置粘贴到 gVim 中,请使用

"+gP
不要忘记双引号。

于 2009-09-29T10:31:46.470 回答