我经常要在vim的新行上粘贴一些东西。我通常做的是:
o<Esc>p
其中插入一个新行并将其置于插入模式,而不是退出插入模式,最后粘贴。
三次击键。不是很有效率。有更好的想法吗?
答案 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>
。因此,使用ojj
和Ojj
以及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
粘贴在行上
优点:
.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'使您返回到最终粘贴的普通模式。