Por que a inserção shift só funciona totalmente no modo de inserção?

Por que a inserção shift só funciona totalmente no modo de inserção?

Tentei colar algum conteúdo (no Git Bash no servidor CentOS) em um arquivo usando o vim.
Acabei de abrir o arquivo e tentei usar shift+ inserte notei que a primeira metade (aproximadamente) foi cortada, mas se eu definir o vim para o modo de inserção e pressionar shift+ inserttudo será colado perfeitamente.
Estava me perguntando por que isso acontece?

Obrigado

Responder1

Ambos Shift+ Inserte "colando"em um terminal se comportam de maneira semelhante - eles emulam o pressionamento de teclas.

Esta é uma distinção importante que muitas vezes é impossível para os terminais fazerem - você está digitando ou colando?Observação: alguns terminais suportam "pasta entre colchetes"modos, depois do comentário de @Josh eu até me deparei com umplug-in vimcolar entre colchetestermo xno qual você pode estar interessado.

Seus dados colados serão perdidos até o primeiro caractere que entrar no modo de inserção. Você também pode descobrir que o cursor se moveu e que outras partes do arquivo foram alteradas (por exemplo: alterou maiúsculas/minúsculas/foi excluída/etc)...

Em resumo, se você estiver colando o texto que deseja inserir no arquivo, entre primeiro no modo de inserção.


Tente copiar o seguinte texto e colá-lo em um terminal executando o Vim (não no modo de inserção):

hello how are you

O resultado é o mesmo que digitar as mesmas letras no teclado:

resultado da colagem no Vim

Nesse caso, você fica no modo de inserção...

Agora tente sair do modo de inserção - Esc- e colar o seguinte

/are
n

Isso realiza uma pesquisa por "são":

resultado da colagem no Vim

Agora cole isto:

:0
dG

Ah, não... tudo se foi!

tudo se foi


Você também descobrirá que, se tiver o recuo ativado, colar um bloco de código no vim (no modo de inserção) recuará demais - ele recuará automaticamente e, em seguida, seu código colado incluirá o recuo.

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

colando código

Para corrigir isso, use os comandos :set pastee:set nopaste

colando código (modo colar)

informação relacionada