En Vim, si pego este script:
#!/bin/sh
VAR=1
while ((VAR < 10))
do
echo "VAR1 is now $VAR"
((VAR = VAR +2))
done
echo "finish"
Obtengo estos resultados extraños:
#!/bin/sh
#VAR=1
#while ((VAR < 10))
# do
# echo "VAR1 is now $VAR"
# ((VAR = VAR +2))
# done
# echo "finish"
#
Han aparecido signos hash (#) y pestañas. ¿Por qué?
vim
clipboard
whitespace
elbarna
fuente
fuente
Respuestas:
Hay dos razones:
Para pegar
vim
mientras la sangría automática está habilitada, debe cambiar al modo pegar escribiendo:Luego puede cambiar al modo de inserción y pegar su código. Después de pegar, escriba:
para desactivar el modo pegar. Dado que esta es una acción común y frecuente,
vim
ofrece el modo de alternar pegar:Puede cambiar
F2
a la tecla que desee, y ahora puede activar y desactivar el pegado fácilmente.Para desactivar la inserción automática de comentarios, puede agregar estas líneas a su vimrc :
vim
también proporciona un registro de pegado para que pegue texto desde el portapapeles del sistema. Puede usar"*p
o"+p
dependiendo de su sistema. En un sistema sin X11, como OSX o Windows, debe usar el*
registro. En un sistema X11, como Linux, puede usar ambos.Otras lecturas
fuente
set paste
nunca debería estar en tu vimrc. Deshabilita o restablece muchas cosas, incluidas las asignaciones de modo de inserción, las asignaciones de línea de comandos, las abreviaturas, el ancho de texto, el ajuste de margen, el autoindent, smartindent, softtabstop, formatoptions, indentexpr y un par de otros.:h paste
tiene toda la lista La mayoría de las personas usan algunas o todas estas cosas y se preguntan por qué se ignoran las configuraciones.:r!cat
para pegar textualmente.set mouse
, que puede ingresar y salir automáticamente del modo pegar al pegar con el clic del mouse.Usa la pasta vim. Lo que quieres es pegar lo que está en el búfer del portapapeles "+p
Esto selecciona el
+
y lo pega en su lugar.Si está utilizando Linux,
*
es el búfer X / clic medio (el último texto seleccionado).Entonces vim sabe que es una pasta.
De lo contrario, vim cree que ha escrito las teclas que se están pegando y realiza su propia sangría automática (además de la sangría copiada) hasta el final del pegado.
Como nota para que esto funcione sobre SSH, debe configurar la opción para compartir su portapapeles
-Y
Ver
man ssh
para más detalles.fuente
gvim
); vim ejecutándose en un emulador de terminal pega el último texto eliminado con "* p, no la selección actual.set mouse?
vim --version
si se compiló con soporte para portapapeles+xterm_clipboard
debe estar en la salidaunnamed
cuerda.Las pestañas se insertaron porque tiene autoindent activado y puede deshabilitar ese comportamiento desactivando autoindent (
:set noai
) antes de pegar en la terminal.Las líneas comentadas se producen mediante comentarios automáticos y se pueden deshabilitar al desactivarlas.
Alternativa a las que debería obtener el comportamiento deseado utilizando los botones
:set paste
, pegar su código formateado y:set nopaste
restaurar el comportamiento normal.fuente