Vim Vi复制粘贴而不导航到行

Vim Vi复制粘贴而不导航到行,vim,vi,Vim,Vi,我是否可以说复制特定行(x)的内容并粘贴到当前行,而不需要实际转到x 现在,我需要键入:xyyp。我只是想看看是否可以更有效地执行此操作。您可以使用getline()函数读取行,使用append()函数写入行: call append('.',getline('42')) 如果需要,可以将其绑定到命令: command! -nargs=1 FetchLine call append('.',getline(<q-args>)) FetchLine 42 命令-nargs=1 Fe

我是否可以说复制特定行(x)的内容并粘贴到当前行,而不需要实际转到x


现在,我需要键入
:xyyp
。我只是想看看是否可以更有效地执行此操作。

您可以使用
getline()
函数读取行,使用
append()
函数写入行:

call append('.',getline('42'))
如果需要,可以将其绑定到命令:

command! -nargs=1 FetchLine call append('.',getline(<q-args>))
FetchLine 42
命令-nargs=1 FetchLine调用append('.',getline())
回程线42

您可以使用此命令

:x,xy
这将在不移动光标的情况下拖动行“x”,然后您可以用p粘贴

编辑

您可以将命令缩短为

:xy
这将抓住“x”行。如果需要一系列行,可以执行以下操作:

:x,x+10y

这将拉动x-(x+10)

:t
可以使用

例如,如果您在第77行,并且希望将第7行复制到当前行的下方,即第78行,您只需:

:7t.
执行此操作后,光标将位于第78行,即新“粘贴”的行

阅读
:h:t
了解详细信息,您可能还想了解强大的
:h范围


:t
而不是
y/y
的另一个优点是,您可以保持
寄存器不动。

在Vim中拖动文本的多种方法

  • :copy
    :t
    命令可以复制一行。例如
    :42t。
  • :t
    可以使用搜索模式获取范围。例如
    :?foo?t.
  • 使用
    :yank
    拉长一条线。例如
    :43y
  • 使用
    :global
    命令拖动/复制多行。例如
    :g/foo/y A
  • 放下一个标记,然后搜索或转到你想要拉扯的链接,然后跳回标记。例如,
    ma?fooyy`ap
  • 使用
    类似于使用标记跳回
  • 使用
    g;
    移动到更改列表中较旧的位置。(类似于标记)
有关更多帮助,请参阅:

:h :t
:h range
:h :y
:h m
:h g;
:h ctrl-o

:t
答案是最好的,但是如果你想完全脱离命令模式,你也可以使用
xG
跳转到
x
行(例如
7G
)。有趣的是:
:7t。
实际上将你移到第7行,然后移回当前行。