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

13

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 o shift+ inserte notei que a primeira metade (aproximadamente) é cortada, mas se eu definir o vim para inserir o modo e pressionar shift+, inserttudo será colado perfeitamente.
Só estava me perguntando por que isso é?

obrigado

treyBake
fonte
Ei, eu também tenho dois polegares !!! : D
RonJohn

Respostas:

24

Ambos Shift+ Inserte " colando " em um terminal se comportam de maneira semelhante - eles simulam pressionamentos de tecla.

Essa é uma distinção importante que geralmente é impossível para os terminais fazerem - você está digitando ou colando? Nota : alguns terminais suportam os modos " colar entre colchetes ", após o comentário de @ Josh, eu até me deparei com uma pasta entre colchetes do plugin vim no xterm, na qual você pode estar interessado.

Seus dados colados serão perdidos até o primeiro caractere que entra no modo de inserção. Você também pode achar que o cursor se moveu e que outras partes do arquivo foram alteradas (por exemplo: caso alterado / excluído / 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 cole-o 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 de colar no Vim

Nesse caso, deixa você 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 "are":

resultado de colar no Vim

Agora cole este:

:0
dG

Oh não ... tudo se foi!

tudo se foi


Você também descobrirá que, se o recuo estiver ativado, colar um bloco de código no vim (no modo de inserção) recuará muito - ele recuará automaticamente e seu código colado incluirá 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)

Attie
fonte
4
"Esta é uma distinção importante que os terminais não podem fazer - você está digitando ou colando?" - isso não é inteiramente verdade, alguns terminais e aplicativos suportam "colar entre colchetes", onde uma sequência especial é enviada antes e depois do texto colado.
Ash
@ Josh: interessante, obrigado ... seu comentário até me levar a uma vim plug-in
Attie
Eu sou o único incomodado set nopaste? Eu esperaria unset paste.
Eric Duminil
@ThisGuyHasTwoThumbs como alternativa, pelo menos ao usar o Vim, convém usar o "+registro para interagir com a área de transferência do sistema, pois ele tenderá a se comportar de maneira mais saudável. A desvantagem é que alguns sistemas ou compilações do Vim podem usar "*, ou simplesmente não têm suporte à área de transferência do sistema, mas, na minha experiência, "+tem sido bastante confiável.
precisa saber é o seguinte