¿Por qué la inserción por desplazamiento solo funciona completamente en el modo de inserción?

¿Por qué la inserción por desplazamiento solo funciona completamente en el modo de inserción?

Intenté pegar algo de contenido (en Git Bash en el servidor CentOS) en un archivo usando vim.
Acabo de abrir el archivo e intenté usar shift+ inserty noté que la primera mitad (aproximadamente) se corta, pero si configuro vim en modo de inserción y presiono shift+, inserttodo se pega perfectamente.
¿Me preguntaba por qué es esto?

Gracias

Respuesta1

Tanto Shift+ Insertcomo "pegado" en una terminal se comportan de manera similar: emulan las pulsaciones de teclas.

Esta es una distinción importante que a menudo es imposible de hacer para los terminales: ¿estás escribiendo o pegando?Nota: algunos terminales admiten "pasta entre corchetes"modos, después del comentario de @Josh incluso me encontré con uncomplemento vimpegar entre corchetes enxtermque te puede interesar.

Los datos pegados se perderán hasta el primer carácter que entre en modo de inserción. También puede encontrar que su cursor se ha movido y que otras partes del archivo han cambiado (por ejemplo: cambio de mayúsculas y minúsculas/se ha eliminado/etc)...

En resumen, si está pegando el texto que desea insertar en el archivo, primero ingrese al modo de inserción.


Intente copiar el siguiente texto y péguelo en una terminal que ejecute Vim (no en modo de inserción):

hello how are you

El resultado es el mismo que escribir las mismas letras en tu teclado:

resultado de pegar en Vim

En este caso te deja en modo insertar...

Ahora intente salir del modo de inserción Escy pegue lo siguiente

/are
n

Esto realiza una búsqueda de "son":

resultado de pegar en Vim

Ahora pega esto:

:0
dG

Oh no... ¡todo se ha ido!

todo se ha ido


También encontrará que si tiene habilitada la sangría, al pegar un bloque de código en vim (en modo de inserción) se sangrará demasiado: se sangrará automáticamente y luego el código pegado incluirá sangría.

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

pegando código

Para solucionar este problema, utilice los comandos :set pastey:set nopaste

pegar código (modo pegar)

información relacionada