为什么移位插入仅在插入模式下才能完全起作用?


13

刚刚尝试使用vim将某些内容(在CentOS服务器上的Git Bash中)粘贴到文件中。
我只是打开文件并尝试使用shift+ insert,我注意到前半部分(大约)被截断了,但是如果我将vim设置为插入模式并按shift+,则insert一切都将完美粘贴。
只是想知道为什么会这样吗?

谢谢


嘿,我也有两个大拇指!!!:D
罗恩·约翰

Answers:


24

无论Shift+ Insert和“ 粘贴 ”到以类似的方式在终端的行为-它们模仿按键。

这是终端通常无法做到的重要区别-您是键入还是粘贴?注意:某些终端支持“ 括号粘贴 ”模式,在@Josh的评论之后,我什至在xterm中遇到了vim插件括号粘贴,您可能对此感兴趣。

您粘贴的数据将丢失,直至进入插入模式的第一个字符。您可能还会发现光标已移动并且文件的其他部分已更改(例如:大小写更改/已删除/等)...

总之,如果要将要插入的文本粘贴到文件中,请首先进入插入模式。


尝试复制以下文本并将其粘贴到运行Vim的终端中(不在插入模式下):

hello how are you

结果与在键盘上键入相同的字母相同:

粘贴到Vim中的结果

在这种情况下,您将处于插入模式...

现在尝试退出插入模式Esc--并粘贴以下内容

/are
n

这将搜索“ are”:

粘贴到Vim中的结果

现在粘贴:

:0
dG

哦,不...一切都消失了!

全没了


您还会发现,如果启用了缩进功能,则将一段代码粘贴到vim中(在插入模式下)会导致太多缩进-它会自动缩进,然后您粘贴的代码将包含缩进。

def my_print(message):
    print(message)
    print('done...')

粘贴代码

要解决此问题,请使用:set paste:set nopaste命令

粘贴代码(粘贴模式)


4
“这是终端无法做出的重要区别-您正在输入还是粘贴?” -这并非完全正确,某些终端和应用程序支持“括号内粘贴”,在粘贴文本之前和之后发送特殊序列。
灰烬

@Josh:有趣,谢谢...您的评论甚至使我找到了一个vim插件
Attie

我是唯一一个被打扰的人set nopaste吗?我希望unset paste
埃里克·杜米尼尔

@ThisGuyHasTwoThumbs作为替代,至少在使用Vim时,您可能希望使用"+寄存器与系统剪贴板进行交互,因为它往往表现得更加理智。缺点是某些系统或Vim的构建可能会"*代替使用,或者根本没有系统剪贴板支持,但是以我的经验,"+这已经相当可靠了。
8bittree
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.