如何使用vim粘贴新行?
我经常不得不在vim的新行上粘贴一些东西。我通常做的是:如何使用vim粘贴新行?,vim,editor,Vim,Editor,我经常不得不在vim的新行上粘贴一些东西。我通常做的是: o<Esc>p op 插入新行并将我置于插入模式,然后退出插入模式,最后粘贴 三次按键。效率不高。有更好的主意吗?在之后不久:help p它说: :[line]pu[t] [x] Put the text [from register x] after [line] (default current line). This always works |linewise|, t
o<Esc>p
op
插入新行并将我置于插入模式,然后退出插入模式,最后粘贴
三次按键。效率不高。有更好的主意吗?在
之后不久: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:pu
如果要复制整行,然后粘贴整行,请首先使用Y
拖动一行或多行,包括换行,然后使用p
粘贴。您还可以使用可视线模式V
,而普通V
用于可视模式。选项:
1) 使用yy
拖动整行(包括行尾字符)p
然后将该行粘贴到当前行之后的新行上,p
(Shift-p)将粘贴到当前行上方
2) 做一个映射:然后它只有一个或两个键:
:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p
:nmap,p op
:nmap op
3) 映射的函数版本(实际上不需要,但只是为了完整性):
:nmap:callappend(行('.'),@”)
“这一行可能会好一点(粘贴前去掉结尾的新行)
:nmap:callappend(行('.')、替换(@“、'\n$”、''))
:帮助注册
:帮助:打电话
:help append()
:帮助热线()
:帮助nmap
您可以在插入模式下粘贴缓冲区,方法是使用
后跟要粘贴的缓冲区的名称。默认缓冲区是“
,您可以这样做
o<C-R>"
o”
我发现我经常使用“
,并将其绑定到我的vimrc中的
:
inoremap <C-F> <C-R>"
inoremap”
就我个人而言,我将Enter(CR)映射如下:
nmap <CR> o<Esc>k
nmap正常
…基于Vim Wiki的一篇文章
通过这种方式,我可以直接从正常模式生成换行符,并将其与希望粘贴到下面的换行符相结合,我会这样做:
<CR>jp
jp
您也可以在上面的nmap中跳过k,这取决于您喜欢从Enter中选择什么功能,因此它将只是p
我还将jj映射到了Esc,这在这种情况下也会有所帮助。就其在vim中的重要性而言,Esc离主行太远了
不比其他解决方案短,但我确实认为它比其中一些解决方案感觉不那么笨重,而且它还有其他用途。我有mapping
inoremap jj
。因此很容易插入带有ojj
和ojj
的新行,然后插入p
因此,
ojjp
粘贴新行。它比op
多了一个笔划,但是ojjp
对我来说很容易。这个解决方案似乎只适用于复制的文本块从新行开始的情况(而不是在一行中的某个地方抓取文本片段),但您始终可以从要抓取的最后一个字符开始复制,然后导航到所需复制块开始之前的行尾的最后一个字符。然后,当您要粘贴它时,将光标放在要粘贴文本的行尾并点击p。如果我没有搞砸解释,这将提供您想要的效果。这仍然使用三次击键,但我发现它比Esc更容易:
o
由于您在点击o后处于插入模式,Alt修饰符将允许您像不使用命令一样使用命令。我找到了一个很好的解决方案。如果您将yank寄存器放在操作系统的剪贴板中(无论如何都很好),使用 比你能做的还要多 除了减少笔划之外,这在
op
和:pu
上都有所改进,因为它保留了缩进:其他两个选项都从新行的字符零开始
需要注意的是,这可能与操作系统有关,也可能与操作系统无关。我所知道的是,它可以在最新版本的OS X上工作,但剪贴板只是在操作系统剪贴板中拖动的众多方法之一。如果您还想在插入模式下结束,可以在插入模式下使用
CTRL-R”
进行粘贴
仍然有三次击键,但没有转义,如果仍要以insert结束,则保存一次击键。我在Neovim配置中使用以下映射:
nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``
nnoremap p m`op``
nnoremap P m`Op``
一点解释:
:在当前光标位置设置一个标记m`
:在下面新建一行,并将文本粘贴到此行中op
:在上面新建一行,并将文本粘贴到此行中OP
:将光标放在原始位置`
:h mark
。使用此插件:
]p
粘贴在下面的行上
[p
粘贴在上面的行上
优点:
- 适用于所有拉伸文本(字、行、字符等)
- 缩进粘贴的文本以匹配文本的缩进 围绕着它
- 2次击键而不是3次,而且“更容易”的击键
- 快速
o ctrl+o p
–插入模式并转到新行o
–运行单个命令 像在正常模式下一样ctrl+o
–粘贴p
这是三次击键,但您仍处于插入模式,而且
o ctrl+o
相当快,因此我个人将其视为2.5次击键。如果您希望粘贴到新行中,并且仍然保持缩进,请创建此映射:
nnoremap p oqp
先决条件:您已经映射了引线,并且在.vimrc
中设置了自动缩进
说明:a
<CR>jp
set clipboard+=unnamed
nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``