Vim 获取要粘贴到光标下方的多行拉伸

Vim 获取要粘贴到光标下方的多行拉伸,vim,keyboard-shortcuts,copy-paste,Vim,Keyboard Shortcuts,Copy Paste,我正试图像这样粘贴到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"

我正试图像这样粘贴到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"
小写的p粘贴在光标后

大写p粘贴在光标前。

在视觉模式下,y拖动字符集,y拖动行集

当您拖动字符时,以下put是字符敏感的,这导致了您的问题。用Y来拖动整行,您应该可以得到您想要的行为。

复制+粘贴(或剪切+粘贴)操作(在Vim术语中:Yank或delete and put)由寄存器进行中介。寄存器可以保存字符或行文本*(请参见
:help characterwise

  • 如果选择“按字符”(
    y5l
    y2W
    y$
    v
    y
    ,等等),寄存器将以字符文本结束
  • 如果选择“按行”(
    y2j
    y}
    V
    y
    ,等等),寄存器将按行保存文本
放置寄存器内容时,文本的位置取决于它是按字符还是按行

  • 当您将按字符排列的文本插入时,它将在光标位置之后/之前插入
  • 当按行放置文本时,它将插入光标所在行的后面/前面
文本是放置在光标位置(它所在的行)之后还是之前,由您使用的put命令控制:

  • p
    (小写)将文本放在光标之后(或其行之后,如果寄存器当前为逐行)
  • P
    (大写)将文本放在光标之前(或其行之前,如果寄存器当前为逐行)
简言之,你如何拉扯/删除如何放置这两者都会影响最终结果


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

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



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

在ex模式下仅使用
put

:put

你怎么拉的?使用
v
ctrl+v
shift+v
或如何使用?使用
2yy
yj
(两行)或
shift+v
应该可以。您可能想尝试用大写字母“P”粘贴。无法开始告诉您这是一个多么棒、彻底的答案。行和字符的区别不是我听说过的,我可以看出它的含义是巨大的。谢谢你的洞察力。(我能够从中得出我的解决方案,它只是2dd和p)