如何在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
将在当前行和P
( Shift – P )粘贴到当前行之上之后,粘贴到新行上。
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>
。 所以很容易用ojj
和Ojj
插入新的行,然后p
。
所以ojjp
粘贴新的换行符。 它有一个更多的中风然后o<esc>p
但ojjp
对我来说很容易。
如果要复制整行然后粘贴整行,请使用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。 如果我没有弄明白这个解释,这应该提供你正在寻找的效果。