如何在vim中粘贴到新行?

193

我经常需要在vim中将一些内容粘贴到新行。我通常会这样做:

o<Esc>p

这个命令会插入一个新行并进入插入模式,之后退出插入模式,并最终粘贴。

需要三个按键。不是很高效。还有更好的想法吗?


12
3个按键不够高效吗? - gtd
90
如果不是为了达到最大效率,为什么要使用 Vim 呢?1 或 2 会更好 :) - static_rtti
4
如果被复制的内容以换行符结尾,这还会导致额外的换行符。 - Jonathan W.
2
@gtd 普通编辑器使用 <Enter><C-V>,两个按键。 - user4052054
3
@user4052054 不,那不是同样的事情,o/O 可以在你所在的任何位置工作,在普通的编辑器中,你必须先到达行的开头或结尾。此外,如果你要复制整行,那么整个过程只需要一个按键就可以插入一行,这在编码中是更常见的操作。 - gtd
显示剩余2条评论
14个回答

2
如果您想在新的一行中粘贴并保留缩进,可以创建以下映射:nnoremap <leader>p oq<BS><Esc>p。前提条件:您已映射了“leader”,并且在您的.vimrc中设置了set autoindent。解释:使用“o”创建一个新行,“q”被输入,然后退格(以保留缩进),最后使用“esc”返回普通模式,您就可以粘贴内容了。请注意保留HTML标记。

1
我在我的 Neovim 配置中使用以下映射:

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

简单解释一下:

  • m`:在当前光标位置设置一个标记。
  • o<Esc>p:创建一个新行并将文本粘贴到该行中。
  • O<Esc>P:在上方创建一个新行并将文本粘贴到该行中。
  • ``:将光标放回原始位置。

有关Vim中标记的更多信息,请参见:h mark


1
如果您也想在插入模式下结束,可以使用CTRL-R "在插入模式下粘贴。三个按键,但不需要退出插入模式,如果您要在插入模式下结束,则可以节省一个按键。https://dev59.com/D3E85IYBdhLWcg3wRBRU#2861909

0

这个解决方案似乎只适用于复制文本块从新行开始的情况(而不是在一行内抓取文本片段),但您始终可以从要抓取的最后一个字符开始复制,然后导航到所需复制块开始之前的行末的最后一个字符。 然后,当您想要粘贴它时,请将光标放置在您希望粘贴文本的下面一行的末尾,然后按p键。 如果我没有解释错,这应该提供您正在寻找的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接