我经常需要在vim中将一些内容粘贴到新行。我通常会这样做:
o<Esc>p
这个命令会插入一个新行并进入插入模式,之后退出插入模式,并最终粘贴。
需要三个按键。不是很高效。还有更好的想法吗?
我经常需要在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).
很遗憾,除非您结合其他答案中建议的键盘映射,否则它并不比您当前的解决方案更短。例如,您可以将其映射到任何键(甚至是p
):
:nmap p :pu<CR>
:pu[t]
将把文本放在当前行之后的新行中,:pu[t]!
将把文本放在当前行之前的新行中。我会相应地编辑我的答案。(感谢 :help p
。) - Bombe:nmap p :pu<CR>
将其放入你的 .vimrc 文件中,然后就可以使用了 :) - Capi Etheriel[p
来粘贴到上一行,使用 ]p
粘贴到下一行。有关 [p
和 ]p
的更多信息,请参阅 :h ]p
。 - young_souvlaki选项:
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
在插入模式下,您可以使用<C-R>
然后输入要粘贴的缓冲区名称来粘贴缓冲区。默认缓冲区为"
,因此您可以执行以下操作:
o<C-R>"
我发现我经常使用<C-R>"
,并将其绑定到我的vimrc文件中的<C-F>
:
我发现我经常使用 <C-R>"
,并在我的 vimrc 文件中将其绑定到 <C-F>
:
inoremap <C-F> <C-R>"
这种方法仍需要三个按键,但我发现它比按Esc更容易:
o<Alt-p>
由于你在按下o后处于插入模式,所以Alt修饰符将允许你像没有进入插入模式一样使用命令。
]p
命令在当前行的下面粘贴
[p
命令在当前行的上面粘贴tpope/vim-unimpaired
才能让它正常工作。 - alextes就我个人而言,我使用了以下命令来扫描 回车符(CR):
nmap <CR> o<Esc>k
...基于这篇Vim Wikia文章。
这样我就可以直接从正常模式下换行,结合想要粘贴到下一行的需求,我会这样做:
<CR>jp
根据您从Enter中需要的功能,您还可以跳过上面的nmap中的k,这样就只剩下<CR>p
了。
我还将jj映射为Esc,这在这种情况下也会有所帮助。对于vim中的重要性来说,Esc离主键盘区太远了。
虽然不比其他解决方案更短,但我认为它感觉不那么笨重,并且它还有其他用途。
如果您想保持插入模式,可以执行 o ctrl+o p
o
– 插入模式并换行ctrl+o
– 在正常模式下执行单个命令p
– 粘贴这是三个按键,但您可以保持在插入模式中,并且o ctrl+o
速度相当快,所以我个人将其视为2.5个按键。
Y
命令复制整行或多行,包括换行符,然后使用p
命令粘贴。你还可以使用V
命令,它是可视化的行模式,与普通的v
命令可视化模式不同。我有一个映射 inoremap jj <ESC>
。这样使用 ojj
和 Ojj
插入新行就变得很容易,然后使用 p
粘贴。
所以 ojjp
可以新粘贴一行。虽然 ojjp
比 o<esc>p
多了一次击键,但对我来说更加容易。
set clipboard+=unnamed
你可以使用o<Ctl-v>
来完成相同的操作,这样做不仅打字更少,而且相比于o<Esc>p
和:pu
,它还可以保留缩进:因为其他两个选项都会将你放在新行的第一个字符处。
需要注意的是,这可能与操作系统有关。我只知道它适用于最近版本的OS X,但剪贴板只是获取操作系统剪贴板中内容的众多方法之一。
o<C-V>
,而不是 o<Ctl-v>
。 - kohane15