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

时间:2015-12-17 17:03:59

标签: linux vim paste

似乎有几种方法可以将代码粘贴到终端Vim中,而不会破坏缩进或将其转换为注释:

  • :set paste +普通操作系统粘贴
  • 使用寄存器*+进行粘贴,例如<c-o>"+p
  • :set mouse=a +用鼠标粘贴

我想知道哪种更好的做法/更普遍的做法?

3 个答案:

答案 0 :(得分:2)

也许它取决于操作系统和Vim的内置功能,但在我的情况下,寄存器*+在终端Vim中是空的。它们在gVim中不是空的,但gVim无论如何都能正确处理粘贴,而不设置'paste'。因此,如果我想将某些内容粘贴到终端Vim中,我需要set paste

答案 1 :(得分:1)

来自normal的粘贴不会缩进。我认为最简单,最便携的方式是<c-o>"+p。由于它可以避免使用pastetoggle,因此它也适用于NeoVim。

可能的无缩进/缩进地图......

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>+

答案 2 :(得分:0)

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

set clipboard^=unnamed
set mouse=a

第一个设置enables the use of the system clipboard"*注册表)用于从/向Vim进行yanking和粘贴,第二个设置用鼠标正确粘贴。

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