¿Es posible convertir pestañas en espacios, manteniendo la alineación del texto?
Simplemente reemplazar solo funciona de manera útil cuando no hay personajes principales.
indentation
tab-characters
ideasman42
fuente
fuente

:h vim-faqy buscar/tab characters. La etiqueta difícil de memorizar es:h faq-14.16.Respuestas:
Puedes usar el
:retabcomando. De:help :retabTenga en cuenta que el comando acepta un rango, por lo que puede hacer una selección visual y luego solo
:retablas líneas seleccionadas.fuente
:retabSin embargo, puede usar , como se indicó, esto cambiará todas las pestañas a espacios, no solo las pestañas al comienzo de la líneaEntonces esto (donde
⇥es un carácter de tabulación):se cambia a (donde
␣hay un espacio):¡Esto puede producir efectos secundarios inesperados en algunos escenarios, y es aún más un problema al cambiar los espacios a pestañas!
Entonces, escribí una pequeña función para cambiar solo las pestañas / espacios al comienzo de la línea:
Con esta versión, debe especificar manualmente
expandtaben la llamada de función (es decir,:call Retab(1)para cambiar las pestañas a espacios), pero también puede modificarlo para tomar el valor actual de&expandtab(como ya lo hace con&tabstop) al igual que lo:retabhace. (Prefiero especificarlo manualmente).fuente
aenif a:expandtab?set expandtaben su .vimrc y luegoautocmd BufWritePre * :call Retab(&expandtab), la sangría se cambiará a pestañas, en lugar de espacios.¡Vim proporciona un
!retabcomando que reemplazará todas las secuencias de<Tab>con nuevas cadenas de espacio en blanco usando el nuevo valor de tabulación (por ejemplo:set tabstop=2) dado, pero todas las pestañas dentro de las cadenas se pueden modificar (por ejemplo, en un programa en C, debe usar\tpara evitar esto)!De manera alternativa, puede cambiar todas las pestañas a espacios con el siguiente comando:
o como lo sugiere @Shahbaz :
Por lo tanto, solo las pestañas utilizadas en sangría se convierten.
Explicación:
%representa todo el búfer / archivo (:help :%)ssignifica sustituto (:help sub-replace-special)\t, o^Isignifica pestaña- use tantos espacios como necesite por una pestañag- significa global, y convertirá múltiples ocurrencias de pestañas en la misma líneaA continuación, para corregir la sangría de todo el archivo, puede intentar: gg=G. Verificación: Re-sangría de código mal sangrado para más detalles.
Para usar espacios de forma predeterminada en lugar de pestañas, debe agregar la siguiente configuración a su
.vimrcarchivo:La solución alternativa es usar
tidyRelacionado:
fuente
%s/^\t\+/ gpara que solo se conviertan las pestañas utilizadas en la sangría. Además,gg=Gpodría ser catastrófico con lenguajes como Python.Intenta usar:
expandes una herramienta de línea de comandos para convertir pestañas en espacios, que puede ejecutar desde un shell o con:!expand.Está en POSIX, por lo que debería estar disponible en la mayoría de los sistemas.
unexpandhará lo contrario, por cierto.fuente
expand?:%!expand -t 4dentro de vim. Mejor aún, también podría usar la opción de ancho de turno actual::exe '%!expand -t ' . &shiftwidthPara completar,
=también podría usarse para corregir sangrías, después de que haya especificado que las pestañas se reemplacen con espacios. En modo normal, puede hacerlo escribiendo:set expandtab. Entonces=podría usarse de dos maneras:=solucionaría las sangrías de los bloques de código seleccionados.gg=Garreglaría todo el archivo, dondeggmueve el cursor al comienzo del archivo, luego=se aplica yGmueve el cursor al final del archivo.Referencia: enlace
fuente