【问题标题】:Paste multi-line string into GVIM at cursor position在光标位置将多行字符串粘贴到 GVIM
【发布时间】:2009-09-29 07:56:46
【问题描述】:

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

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

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

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

解决方案

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

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

【问题讨论】:

    标签: vim keyboard-shortcuts copy-paste


    【解决方案1】:

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

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

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

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

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

    编辑

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

    在插入模式下,键入

    CTRL-R *
    

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

    【讨论】:

    • 啊,终于有人理解我的问题了 :-) 我明白你在做什么,这确实只是一个半有效的解决方法。奇怪的是 vim 不能正确处理这个问题。在将缓冲区(剪贴板)粘贴到VIM之前,有没有办法删除回车符? (顺便说一句:非标准的 ctrl-v 快捷方式不是这里的问题)
    【解决方案2】:

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

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

    【讨论】:

    • 非常好的提示。我花了一些时间才意识到这仅在不处于插入模式时才有效。但我也可以使用 :imap 将其映射到那里。谢谢!
    • 小更新:我已经通过在映射命令末尾使用 P 而不是 p 来更改您的解决方案。这会将它粘贴在光标之后,这对我来说感觉更自然。
    【解决方案3】:

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

    所以,你可以使用:

    • "*p光标前粘贴
    • "*P光标后粘贴
    • "*y复制(可视区,或取一个 后缀告诉 Vim “复制什么”)
    • "*dcut(可视区域,或带 后缀)

    等等。

    【讨论】:

    • p 和 P 从 VIM 缓冲区粘贴,而不是从 Windows 剪贴板粘贴,因此在这种情况下不起作用
    • 嗯,谢谢你的提示,但这仍然不起作用。它被粘贴在我所在的行上方,而不是光标位置
    【解决方案4】:
    :set paste
    

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

    :set nopaste
    

    恢复格式设置

    【讨论】:

    • 不错的尝试,但对我不起作用。 2 行仍然粘贴在当前行之上
    【解决方案5】:

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

    "+gP
    不要忘记双引号。

    【讨论】:

    • 问题不是如何粘贴,而是如何在光标处粘贴,因为剪贴板内容包含两行(由回车分隔)
    • 我相信我理解你的问题。你是说你尝试了“+gP 但它没有用?它对我有用。
    • 我已更新我的回复,以便直接回答您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2012-03-12
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多