如何使用vim粘贴到新行?

sta*_*tti 125 vim editor

我经常要在vim的新行上粘贴一些东西.我通常做的是:

o<Esc>p
Run Code Online (Sandbox Code Playgroud)

其中插入新行并将其置于插入模式,而不是退出插入模式,最后粘贴.

三次击键.不是很有效率.有更好的想法吗?

Bom*_*mbe 63

不久之后:help p它说:

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不会比你当前的解决方案更短,除非你把它与一些键盘地图结合起来,如另一个答案所示.例如,您可以将其映射到任何键(偶数p):

:nmap p :pu<CR>
Run Code Online (Sandbox Code Playgroud)

  • 好的,`:pu [t]`将文本放在当前行之后的新行中,`:pu [t]!`将文本放在当前行之前的新行中.我会相应地编辑我的答案.(Hooray for`:help p`.) (4认同)
  • 虽然按键次数相同,但我觉得这样做效率更高.o <Esc> p感觉笨重,而事实并非如此. (4认同)
  • 我知道这一点,并且使用了它,但这并不是我要的,因为有时您要复制的内容中没有任何LF。如果存在“粘贴到新行”命令,则无论您要粘贴的内容如何,​​它都将起作用,因此您不必考虑它。 (2认同)
  • 确实没有比我当前的解决方案更好,但是我认为这是对我问题的最佳答案。 (2认同)
  • 你可以将命令映射到任何键,包括 p 本身:`:nmap p :pu&lt;CR&gt;` 把它放在你的 .vimrc 文件中,然后你走:) (2认同)

DrA*_*rAl 51

选项:

1)yy用于抽出整行(包括行尾字符). p然后将该行粘贴到当前行之后的新行上,并且P(Shift- P)将粘贴到当前行之上.

2)进行映射:然后它只有一两个键:

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p
Run Code Online (Sandbox Code Playgroud)

3)映射的功能版本(真的不必要,但只是为了完整性):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我想我会做一个映射。我只是希望可能有一个标准的解决方案:-/谢谢您的回答! (2认同)
  • @AI:我认为使用',p'(','映射为我的&lt;Leader&gt;)是最好的解决方案。您甚至提供了易于使用的功能。:)太好了! (2认同)

sou*_*rge 25

您可以使用插入模式粘贴缓冲区,<C-R>然后使用要粘贴的缓冲区的名称.默认缓冲区是",所以你会这样做

o<C-R>"
Run Code Online (Sandbox Code Playgroud)

我发现我<C-R>"经常使用并将其绑定到<C-F>我的vimrc中:

inoremap <C-F> <C-R>"
Run Code Online (Sandbox Code Playgroud)

  • 这很棒,因为如果复制的行没有缩进,它可以保持缩进正确。 (2认同)

Nic*_*ick 18

这仍然使用三次击键,但我发现它比Esc更容易:

o<Alt-p>

由于您在点击o后处于插入模式,因此Alt修饰符将允许您使用命令,就像您不使用命令一样.

  • 当您尝试yank sth时,用一种很方便的方法在新行中用“ d $”切入 (2认同)

miy*_*lys 9

就个人而言,我已经 像这样nmap Enter(CR):

nmap <CR> o<Esc>k
Run Code Online (Sandbox Code Playgroud)

...基于这篇 Vim Wikia文章.

通过这种方式,我可以直接从普通模式创建换行符,并将其与想要粘贴到下面的换行符相结合,我会这样做:

<CR>jp
Run Code Online (Sandbox Code Playgroud)

你也可以在上面的nmap中跳过k,这取决于你更喜欢Enter的功能,所以它就是这样<CR>p.

我也把jj想象成Esc,这也有助于这种情况.因为它在vim中的重要性,Esc离主页行太远了.

不比其他解决方案短,但我认为它比其中一些解决方案感觉不那么笨重,而且它也有其他用途.


rec*_*onn 7

如果你想保持插入模式,你可以这样做o ctrl+o p

\n\n
    \n
  • o\xe2\x80\x93 插入模式并转到新行
  • \n
  • ctrl+o\xe2\x80\x93 运行单个命令\n就像在正常模式下一样
  • \n
  • p\xe2\x80\x93 粘贴
  • \n
\n\n

只需按三个键,但您仍处于插入模式,而且o ctrl+o相当快,因此我个人将其视为 2.5 次击键。

\n


Pet*_*ter 5

如果要复制整行然后粘贴整行,请首先使用Y来拉动一行或多行(包括换行符)并p粘贴。您也可以使用V,这是视觉线条模式,与普通v视觉模式相反。

  • 问题是,有时候您根本不想复制整行...无论我复制了十行还是两个单词,我都想要一种有效的解决方案。 (3认同)

cro*_*ers 5

使用此插件:https : //github.com/tpope/vim-unimpaired

]p粘贴在下面的行

[p粘贴在上面的行

好处:

  • 适用于所有带阴影的文本(单词,行,字符等)
  • 缩进粘贴的文本以匹配其周围的文本的缩进
  • 2次击键,而不是3次击键
  • 快速

  • 我也最喜欢。可能值得一提的是,您确实需要“tpope/vim-unimpaired”才能正常工作。 (3认同)
  • 这个答案应该是正确的,简单,快速,不需要经历额外的麻烦。谢谢@crogers (2认同)