为什么 shift insert 只能在插入模式下完全工作?

tre*_*ake 13 bash vim

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

谢谢

Att*_*tie 24

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

这是一个重要的区别,对于终端来说通常是不可能的——你是打字还是粘贴?注意:某些终端支持“括号粘贴”模式,在@Josh 发表评论后,我什至在xterm 中遇到了一个vim 插件括号粘贴,您可能会感兴趣。

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

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


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

hello how are you
Run Code Online (Sandbox Code Playgroud)

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

粘贴到 Vim 的结果

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

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

/are
n
Run Code Online (Sandbox Code Playgroud)

这将执行对“are”的搜索:

粘贴到 Vim 的结果

现在粘贴这个:

:0
dG
Run Code Online (Sandbox Code Playgroud)

哦不……一切都过去了!

全没了


你还会发现,如果你启用了缩进,那么将一段代码粘贴到 vim(在插入模式下)会缩进太多——它会自动缩进,然后你粘贴的代码将包含缩进。

def my_print(message):
    print(message)
    print('done...')
Run Code Online (Sandbox Code Playgroud)

粘贴代码

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

粘贴代码(粘贴模式)

  • “这是终端无法区分的一个重要区别——你是打字还是粘贴?” - 这并不完全正确,一些终端和应用程序支持“括号粘贴”,其中在粘贴文本之前和之后发送特殊序列。 (4认同)