¿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-faq
y buscar/tab characters
. La etiqueta difícil de memorizar es:h faq-14.16
.Respuestas:
Puedes usar el
:retab
comando. De:help :retab
Tenga en cuenta que el comando acepta un rango, por lo que puede hacer una selección visual y luego solo
:retab
las líneas seleccionadas.fuente
:retab
Sin 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
expandtab
en 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:retab
hace. (Prefiero especificarlo manualmente).fuente
a
enif a:expandtab
?set expandtab
en su .vimrc y luegoautocmd BufWritePre * :call Retab(&expandtab)
, la sangría se cambiará a pestañas, en lugar de espacios.¡Vim proporciona un
!retab
comando 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\t
para 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 :%
)s
significa sustituto (:help sub-replace-special
)\t
, o^I
significa pestaña- use tantos espacios como necesite por una pestaña
g
- 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
.vimrc
archivo:La solución alternativa es usar
tidy
Relacionado:
fuente
%s/^\t\+/ g
para que solo se conviertan las pestañas utilizadas en la sangría. Además,gg=G
podría ser catastrófico con lenguajes como Python.Intenta usar:
expand
es 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.
unexpand
hará lo contrario, por cierto.fuente
expand
?:%!expand -t 4
dentro de vim. Mejor aún, también podría usar la opción de ancho de turno actual::exe '%!expand -t ' . &shiftwidth
Para 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=G
arreglaría todo el archivo, dondegg
mueve el cursor al comienzo del archivo, luego=
se aplica yG
mueve el cursor al final del archivo.Referencia: enlace
fuente