如何避免在粘贴到Vim时出现额外的括号

如何避免在粘贴到Vim时出现额外的括号,vim,mapping,Vim,Mapping,我在编写代码时使用了一些地图: imap ( ()<C-[>i imap [ []<C-[>i imap { {}<C-[>i imap(()i imap[]i imap{{}i 所以当我加上“(”,它写的是“()”(“[”和“{”)也是一样的。 问题是,当我将某些内容粘贴到Vim中时: for (i = 0; i < count; i++) { tab[i] = something() } for(i=0;i

我在编写代码时使用了一些地图:

imap ( ()<C-[>i
imap [ []<C-[>i
imap { {}<C-[>i
imap(()i
imap[]i
imap{{}i
所以当我加上“(”,它写的是“()”(“[”和“{”)也是一样的。 问题是,当我将某些内容粘贴到Vim中时:

for (i = 0; i < count; i++) {
tab[i] = something()
}  
for(i=0;i
我明白了

for (i = 0; i < count; i++) {
tab[i] = something()
}  
)]})
for(i=0;i

是否可以避免额外的括号?

您需要
'paste'
选项;使用
:set paste设置它。它禁用插入模式映射、缩写和其他自动格式化选项

另一件事是有多种粘贴方式:

  • “+p
  • :设置鼠标=a
    ,然后单击鼠标中键
  • 插入模式,
    +
  • :a!
    ,然后使用终端的粘贴命令

所有这些都将正确粘贴。唯一让vim感到困惑的是,当您使用终端的“粘贴”命令时,没有事先警告它。

谢谢。这就是我想要的。如果我想启用缩写,我必须做:set nopaste我想做的一件事是绑定一个功能键来切换选项,如
映射:set paste!^M
。(您必须键入^M as。)您可以使用而不是使用^V键入^M,这更方便。您还可以使用以下映射:映射:设置粘贴!粘贴?以便在按F4后,您将看到选项的新状态。“:设置粘贴!粘贴?“这是一个很好的技巧,保罗,谢谢你提到它!实际上有一个专门用于设置粘贴模式切换键的命令:
set pastetoggle=
。当然,你可以将它设置为任何你喜欢的键。