如何在vim中贴上新的一行?

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

o<Esc>p 

它插入一个新的行,并把我插入模式,比退出插入模式,最后粘贴。

三个按键。 效率不高 任何更好的想法?

不久之后: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). 

不幸的是,它不会比现在的解决scheme更短,除非您将其与一些不同的答案中所build议的键盘映射结合使用。 例如,您可以将其映射到任何键(甚至是p ):

 :nmap p :pu<CR> 

选项:

1)使用yy来抽取整行(包括行尾字符)。 p将在当前行和PShiftP )粘贴到当前行之上之后,粘贴到新行上。

2)做一个映射:那么它只有一个或两个键:

 :nmap ,p o<ESC>p :nmap <F4> o<ESC>p 

3)映射的function版本(不必要的,但为了完整性):

 :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 

您可以使用<CR>在插入模式下粘贴缓冲区,然后粘贴缓冲区的名称。 默认的缓冲区是" ,所以你会这样做

 o<CR>" 

我发现我经常使用<CR>"并将其绑定到我的vimrc中的<CF>

 inoremap <CF> <CR>" 

这仍然使用三个按键,但我觉得比Esc更容易:

o<Alt-p>

由于您在点击o后处于插入模式,Alt修饰符将允许您使用一个命令,就好像您不是。

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

 nmap <CR> o<Esc>k 

…基于这个 Vim Wikia文章。

这样,我可以直接从正常模式换行,并结合这个想粘贴到下面的换行符我会这样做:

 <CR>jp 

您也可以将j写入nmap,具体取决于您在Enter中所喜欢的function。

我也曾经把jj想象成Esc ,这也有助于解决这个问题。 Esc距离主线太远,因为它有多重要。

不比其他解决scheme短,但我觉得它比其中一些解决scheme更笨拙,它也有其他用途。

我有映射inoremap jj <ESC> 。 所以很容易用ojjOjj插入新的行,然后p

所以ojjp粘贴新的换行符。 它有一个更多的中风然后o<esc>pojjp对我来说很容易。

如果要复制整行然后粘贴整行,请使用Y将首行中的一行或多行(包括换行符)抽出,然后粘贴。 您也可以使用视觉线模式的V ,而对于视觉模式,使用V

我find了一个优雅的解决scheme。 如果你在你的操作系统的剪贴板(这是伟大的任何地方)放在注册登记,与

 set clipboard+=unnamed 

比你可以做o<Ctl-v>

除了较less的笔画外,这对o<Esc>p:pu都有所改进,因为它保留了缩进:其他选项都会在新行的字符零处开始。

警告的是,这可能会或可能不会取决于操作系统。 我所知道的是,它可以在最新版本的OS X上运行,但剪贴板只是在操作系统剪贴板中获取内存的许多方法之一。

如果你还想以插入模式结束,可以使用CTRL-R "在插入模式下进行粘贴CTRL-R " https://stackoverflow.com/a/2861909/461834

还有三个按键,但是不能退出,如果你想以插入方式结束,则可以保存一个按键。

这种解决scheme似乎只适用于复制文本块在新行开始时(而不是在行内某处抓取文本片段),但是您始终可以在要抓取的最后一个字符上开始复制,然后导航到所需复制块开始之前的最后一个字符。 然后,当您想粘贴文本时,将光标放在要粘贴文本的行的末尾,然后按p。 如果我没有弄明白这个解释,这应该提供你正在寻找的效果。