【问题标题】:Getting a multiline yank to paste below the cursor获取多行 yank 以粘贴到光标下方
【发布时间】:2012-06-11 20:23:29
【问题描述】:

我正在尝试像这样粘贴 Vim:

    a_1 "Day"
    a_2 "Week"
    a_neg_1 "Refused"
    a_neg_2 "Don’t know"

我复制最后两行并将它们放在前两行之上。像这样:

    a_neg_1 "Refused"
    a_neg_2 "Don’t know"
    a_1 "Day"
    a_2 "Week"

似乎每次我做多行拉动时,它总是想内联粘贴它。像这样:

    aa_neg_1 "Refused"
    a_neg_2 "Don’t know"_1 "Day"
    a_2 "Week"

【问题讨论】:

  • 你是怎么拉的?与vctrl+vshift+v 或如何?使用2yyyj(两行)或shift+v 它应该可以工作。
  • 您可能想尝试使用大写“P”进行粘贴。

标签: vim keyboard-shortcuts copy-paste


【解决方案1】:

复制+粘贴(或剪切+粘贴)操作(在 Vim 中:yank 或 delete 和 put)由寄存器调节。寄存器可以保存按字符或按行的文本*(请参阅:help characterwise)。

  • 如果您选择“按字符”(y5ly2Wy$vy 等),则寄存器将以 character-wise 文字。
  • 如果您选择“按行”(y2jy}Vy 等),则寄存器将保存 line-wise 文本。

当你放置寄存器的内容时​​,文本的放置取决于它是按字符还是按行。

  • 当您放置按字符文本时,它将被插入光标位置之后/之前
  • 当您放置逐行文本时,它将插入光标所在行之后/之前

文本是放在光标位置(它所在的行)之后还是之前,由您使用的 put 命令控制:

  • p(小写)将文本放在光标之后(或在其行之后,如果寄存器当前是逐行的)
  • P(大写)将文本放在光标之前(或在其行之前,如果寄存器当前是逐行的)

简而言之,您如何拉取/删除您如何放置两者都会影响最终结果。


根据您的描述,您似乎正在使用 p 来放置按字符排列的文本(可能通过 v 或单击鼠标进行选择)。

相反,您应该将P(放在前面)与逐行文本一起使用。如果您正在进行基于键盘的选择,请使用V(大写)而不是v(小写)。如果您正在进行基于鼠标的选择,请在开始选择时单击三次而不是单击一次。然后,在移动到第一行后,拉出或删除并使用P 进行最后的“粘贴”。


* 寄存器也可以保存块级数据(例如,来自 Control-V 块级可视模式);放置时,它将以块方式放置。

【讨论】:

  • 无法告诉您这是一个多么棒的、彻底的答案。逐行或逐字符的区别不是我听说过的,我可以看到它的含义是巨大的。感谢您的洞察力。 (我能够从中得出我的解决方案,它只是 2dd 和 p)
【解决方案2】:

小写 p 粘贴在光标之后。

大写 P 粘贴在光标之前。

【讨论】:

    【解决方案3】:

    在可视模式下,y 抽出字符集,Y 抽出行集。

    当你拉出字符时,下面的 put 是字符敏感的,这会导致你的问题。用 Y 抽出整行,你应该得到你想要的行为。

    【讨论】:

      【解决方案4】:

      在 ex 模式下仅使用 put

      :put
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        相关资源
        最近更新 更多