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

时间:2014-01-29 15:26:11

标签: vim vi

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

现在,我需要输入:x<Enter>yy<C-o>p。我只是想看看能否更有效地完成这项工作。

4 个答案:

答案 0 :(得分:12)

您可以使用:t

例如,如果你在第77行,并且想要在当前行下面复制第7行,即#78,你只需:

:7t.

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

阅读:h :t了解详细信息,您可能也想知道强大的:h range

:t而不是y/Y的另一个优点是,您保持"注册不受影响。

答案 1 :(得分:5)

在Vim中抽取文本的许多方法

  • :copy:t命令可以复制一行。例如:42t .
  • :t可以使用搜索模式的范围。例如:?foo?t.
  • 使用:yank划一条线。例如:43y
  • 使用:global命令对多行进行Yank /复制。例如:g/foo/y A
  • 删除标记,然后搜索或转到您要拉动的链接,然后跳回标记。例如ma?foo<cr>yy`ap
  • 使用<c-o>类似于使用标记跳回来。
  • 使用g;移至更改列表中的旧位置。 (与商标相似)

如需更多帮助,请参阅:

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

答案 2 :(得分:4)

您可以使用此命令

:x,xy

这会在不移动光标的情况下拉出'x'线,然后你可以用p

粘贴

修改

您可以将命令缩短为

:xy

这将抓住'x'线。如果你想要一系列线条,你可以这样做:

:x,x+10y

那将会划线x - (x + 10)

答案 3 :(得分:0)

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

call append('.',getline('42'))

如果需要,您可以将其捆绑到命令:

command! -nargs=1 FetchLine call append('.',getline(<q-args>))
FetchLine 42