用于python代码段的vim适当缩进

用于python代码段的vim适当缩进,python,vim,insert,Python,Vim,Insert,在编辑Python代码时,我很难使用vimsmart缩进vim特性。一般来说,我喜欢vim中的:set nocompatible选项,以及:set autoindent(和/或:set smartindent)。除了一个非常恼人的行为外,一切都很好。假设您编写了一些代码,然后希望插入一个从其他地方获取的Python代码片段。python代码段可能包含注释,例如 # comment1 a=1 # comment2 b=1 在vim中,当您进入插入模式(例如键入o)并粘贴代码时,vim将执行大量缩

在编辑Python代码时,我很难使用vimsmart缩进vim特性。一般来说,我喜欢vim中的
:set nocompatible
选项,以及
:set autoindent
(和/或
:set smartindent
)。除了一个非常恼人的行为外,一切都很好。假设您编写了一些代码,然后希望插入一个从其他地方获取的Python代码片段。python代码段可能包含注释,例如

# comment1
a=1
# comment2
b=1
在vim中,当您进入插入模式(例如键入o)并粘贴代码时,vim将执行大量缩进代码的工作,而不是获得代码片段

# comment1
# a=1
# # comment2
# b=1
因此,它在第一条注释之后插入附加注释(磅符号),并将其保留到代码段的其余部分。现在想象一下,您有相当长的具有不同标识的代码段,您可以想象粘贴操作的丑陋程度(代码将不正确地缩进和注释)

有没有办法解决这个问题

解决此问题的唯一方法是将vim兼容模式与
noautoindent
选项一起设置,然后粘贴代码段。这样做将正确插入(按原样)。但是在模式之间切换(
nocompatible
vs
compatible
)太多了(称我为lazy,但这应该是在
nocompatible
模式下正确插入带有注释的代码段的一种方式)。在
nocompatilbe
模式中设置
noautoindent
没有任何区别(问题仍然存在),因此它与兼容/nocompatible模式有关。

您需要的选项是

set paste

它会将您想要的内容粘贴为原始内容。

最好键入
:设置粘贴
在粘贴之前切换选项,然后在粘贴之后,您可以回到命令行,然后
立即再次切换。这正是我想要的。感谢您的宝贵提示。虽然
设置粘贴
是解决此问题的正确方法,但我觉得应该指出,插入注释字符是因为
格式选项设置的“r”标志,以防有人试图禁用此行为。