中止 vim 粘贴

Dan*_*gen 6 vim vi copy-paste

有时我将大量数据粘贴到 vim(> 5000 行)中而忘记启用粘贴模式。在这种情况下,vim 忙了几分钟,试图正确缩进所有文本(使用某种数据会在性能方面变得非常糟糕,缩进大约 10'000 个字符)。

有没有办法中止粘贴过程?ESC、CTRL-C 和 CTRL-D 不起作用。

Vuc*_*rul 5

如果您使用的是 GUI 版本,您确实应该从剪贴板寄存器 ( "*) 或 X11 选择 ( "+)粘贴,正如 echristopherson 已经建议的那样。因此,您无需单击鼠标中键或其他任何方式,而是导航到要粘贴的位置,然后键入"*P包括初始引号。当通过pP命令粘贴时,vim 知道您正在粘贴,因此该'paste选项是不必要的——无论您从哪个寄存器粘贴。

如果您从终端粘贴,vim 在这件事上没有发言权。终端模拟器将转储您所指示的任何内容,并且在大多数情况下,vim 无法区分不断输入的字符是您输入还是粘贴。因此,您需要设置'paste告诉 vim 它不应该进行缩进等操作。

因此,如果您从终端粘贴,所有要粘贴的字符都会一次排队,并且基本上已经发送到 vim,因此您实际上无法中断它。从终端模拟器的角度来看,CTRL+c只是一个普通字符,因此它排在所有其他等待粘贴的东西后面。当 vim 终于看到CTRL+ 时c,为时已晚,因为没有什么可以中止了。

(更新:根据终端模拟器,CTRL+c和类似的信号可能会以优先的方式发送。具体来说,我在 Putty 中注意到了这一点,它立即提供中断信号,确实允许我中止错位的冗长粘贴操作。我不不过,我真的不知道这是如何工作的。)


长话短说:如果可能,请使用"*P"+P粘贴(如果我没记错的话,它甚至可以在某些终端模拟器中使用)。这是“正确”的粘贴方式;其他一切基本上都是一种解决方法,让您头疼。