如何使用vim粘贴到新行?

时间:2009-08-28 12:33:58

标签: vim editor

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

o<Esc>p

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

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

14 个答案:

答案 0 :(得分:56)

: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).

不幸的是,它不会比您当前的解决方案短,除非您将其与某些键盘地图相结合,如另一个答案中所建议的那样。例如,您可以将其映射到任何键(甚至p):

:nmap p :pu<CR>

答案 1 :(得分:44)

选项:

1)使用yy来拉动整行(包括行尾字符)。然后,p会在当前行之后将该行粘贴到新行上,并且P Shift - P )将粘贴到当前行之上。

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

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

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

答案 2 :(得分:24)

您可以使用<C-R>在插入模式下粘贴缓冲区,然后粘贴缓冲区的名称。默认缓冲区为",因此您可以执行

o<C-R>"

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

inoremap <C-F> <C-R>"

答案 3 :(得分:18)

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

o<Alt-p>

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

答案 4 :(得分:9)

就我个人而言,我已按照以下方式 Enter(CR)

nmap <CR> o<Esc>k

...基于this Vim Wikia文章。

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

<CR>jp

你也可以在上面的nmap中跳过 k ,具体取决于你喜欢的功能 Enter ,所以它只是<CR>p

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

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

答案 5 :(得分:5)

如果您要复制整行,然后粘贴整行,请先使用Y来抽取一行或多行(包括换行符),然后粘贴p。您还可以使用V,这是可视模式,而对于可视模式,则使用普通v

答案 6 :(得分:3)

我有映射inoremap jj <ESC>。因此,使用ojjOjj以及p插入新行很容易。

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

答案 7 :(得分:2)

我找到了一个优雅的解决方案。如果您将yank注册表放在操作系统的剪贴板中(无论如何都很棒),

set clipboard+=unnamed

比你做o<Ctl-v>

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

警告说,这可能是也可能不依赖于操作系统。我所知道的是它适用于最新版本的OS X,但剪贴板只是在操作系统剪贴板中获取数据的众多方法之一。

答案 8 :(得分:1)

如果您还希望以插入模式结束,则可以使用CTRL-R "在插入模式下粘贴。 https://stackoverflow.com/a/2861909/461834

还有三次击键,但没有逃脱,如果你想以插入方式结束,你可以保存击键。

答案 9 :(得分:1)

]p粘贴在以下行

[p粘贴在行上

优点:

  • 适用于所有带阴影的文本(单词,行,字符等)
  • 使粘贴的文本缩进以匹配文本的缩进 周围
  • 2次击键,而不是3次“轻松”击
  • 使我的.vimrc保持最小,并且不使用映射
  • 快速

答案 10 :(得分:1)

如果您想保持插入模式,可以执行o ctrl+o p

  • o –插入模式并转到新行
  • ctrl+o –运行一个命令 就像在普通模式下一样
  • p –粘贴

这是三个按键,但是您仍处于插入模式,o ctrl+o也非常快,因此我个人将其视为2.5个按键。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我在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

答案 13 :(得分:0)

如果您想粘贴new line并且仍然保持缩进,请创建此映射:

nnoremap <leader>p oq<BS><Esc>p

前提条件:您已经映射了领导者,并且您的set autoindent中有.vimrc

说明:用'o'创建新行,键入'q',然后在其后退格(以保持缩进),并且'esc'使您返回到最终粘贴的普通模式。