在终端中粘贴代码 Vim (:set paste vs <c-r>* vs ..)

Pasting code in a terminal Vim (:set paste vs <c-r>* vs ..)

似乎有几种方法可以将代码粘贴到终端中 Vim w/o 破坏缩进或将其变成注释:

我想知道哪种方法更好/更通用?

也许这取决于 OS 和构建的功能 Vim,但在我的例子中,寄存器 *+ 在终端 Vim 中是空的.它们在 gVim 中不为空,但 gVim 无论如何都能正确处理粘贴,无需设置 'paste'。因此,如果我想将某些内容粘贴到终端 Vim,我需要 set paste.

normal 粘贴不会缩进。我认为最简单、最便携的方式是<c-o>"+p。因为它避免了 pastetoggle,它也可以与 NeoVim 一起工作。

可能 no-indent/indent 个地图...

inoremap <silent> <f3> <c-o>"+p
inoremap <silent> <f4> <c-r>+

虽然上面有一个小问题。它将光标留在粘贴文本的开头而不是结尾,以便粘贴时不缩进。

要将光标留在同一位置...

inoremap <silent> <f3> <c-o>:set paste<cr><c-r>+<c-o>:set nopaste<cr>
inoremap <silent> <f4> <c-o>:set nopaste<cr><c-r>+

您可能会发现这两个设置对于将内容粘贴到终端中很有用Vim:

set clipboard^=unnamed
set mouse=a

第一个设置 enables the use of the system clipboard"* 寄存器)用于拖动和粘贴 from/to Vim,第二个设置使鼠标粘贴正常工作。

pastetoggle 的映射可能仍然有用,例如通过 SSH 编辑文件时。