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

Linux 在终端Vim中粘贴代码(:设置粘贴vs<;c-r>;*vs.),linux,vim,paste,Linux,Vim,Paste,似乎有几种方法可以将代码粘贴到终端Vim中,而不破坏缩进或将其转换为注释: :设置粘贴+普通操作系统粘贴 使用寄存器粘贴*和+,例如“+p :设置鼠标=a+使用鼠标粘贴 ? 我想知道哪一种做法更好/更通用?也许这取决于操作系统和Vim内置的功能,但在我的例子中,寄存器*和+在终端Vim中是空的。它们在gVim中不是空的,但gVim无论如何都能正确处理粘贴,而不设置'paste'。所以如果我想粘贴一些在终端Vim中,我需要设置粘贴从正常粘贴不会缩进。我认为最简单、最便携的方法是“+p。由于它避

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

  • :设置粘贴
    +普通操作系统粘贴
  • 使用寄存器粘贴
    *
    +
    ,例如
    “+p
  • :设置鼠标=a
    +使用鼠标粘贴
  • ?

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

也许这取决于操作系统和Vim内置的功能,但在我的例子中,寄存器
*
+
在终端Vim中是空的。它们在gVim中不是空的,但gVim无论如何都能正确处理粘贴,而不设置
'paste'
。所以如果我想粘贴一些在终端Vim中,我需要
设置粘贴

正常
粘贴不会缩进。我认为最简单、最便携的方法是
“+p
。由于它避免了粘贴切换,因此它也可以与NeoVim一起使用

可能没有缩进/缩进映射

inoremap <silent> <f3> <c-o>"+p
inoremap <silent> <f4> <c-r>+
inoremap“+p
inoremap+
不过,上面的方法有一个小问题,它将光标保留在粘贴文本的开头而不是结尾,以便粘贴时不缩进

要将光标保留在同一位置

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>+
inoremap:set paste+:set nopaste
inoremap:设置nopaste+

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

set clipboard^=unnamed
set mouse=a
第一个设置(
“*
寄存器)用于从/到Vim拖动和粘贴,第二个设置使鼠标粘贴工作正常


pastetoggle
创建映射可能仍然有用,例如在SSH上编辑文件时。

它将光标保留在粘贴文本的开头而不是结尾处
-实际上我没有这个问题。@eugeney我尝试了Vim和NeoVim,两者都得到了相同的结果。我认为规范化的另一种方法可能是跳到最后一个插入点。尽管
g'[
。这会将光标保留在开头而不是结尾。