将多行字符串粘贴到光标位置的GVIM中

时间:2009-09-29 07:56:46

标签: vim keyboard-shortcuts copy-paste

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

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

我该怎么做才能使它也能用两行文字(例如'粘贴没有格式化')?

重要提示:要粘贴的字符串包含两个由回车符(或类似内容)分隔的行!

解决方案

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

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

5 个答案:

答案 0 :(得分:10)

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

其次,您所看到的行为是标准的vi [m]行为,如果您划出一条或多条整行,则粘贴将始终在当前行的上方或下方产生一条或多条线。

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

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

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

修改

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

在插入模式下,键入

CTRL-R *

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

答案 1 :(得分:2)

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

:map <C-v> "=substitute(@*, "\n", " ", "g")<CR>p

答案 2 :(得分:1)

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

所以,你可以使用:

  • "*p在光标前粘贴
  • "*P光标后粘贴
  • "*y复制(视觉区域,或取一个 postfix告诉Vim“要复制什么”)
  • "*d切(视觉区域,或用 后缀)

等等。

答案 3 :(得分:1)

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

"+gP
不要忘记双引号。

答案 4 :(得分:1)

:set paste
在将内容粘贴到缓冲区之前

:set nopaste

恢复格式设置