1 - Se você possui espaços e deseja tabulações.
Primeiro, você precisa decidir quantos espaços terão uma única guia. Dito isto, suponha que você tenha linhas com 4 espaços à esquerda, ou 8 ... Do que você imagina, provavelmente deseja que uma guia tenha 4 espaços. Agora, com essas informações, você faz:
:set ts=4
:set noet
:%retab!
Existe um problema aqui! Essa sequência de comandos procurará todo o seu texto, não apenas espaços no início da linha. Isso significa que uma string como: "Hey,␣this␣␣␣␣is␣4␣spaces"
se tornará "Hey,␣this⇥is␣4␣spaces"
, mas não é! é uma guia!
Para resolver esse pequeno problema, recomendo um search
, em vez de retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Essa pesquisa procurará no arquivo inteiro todas as linhas começando com qualquer número de guias, seguido por 4 espaços e substituindo-o pelo número de guias encontradas mais uma.
Infelizmente, isso não será executado de uma vez!
A princípio, o arquivo terá linhas começando com espaços. A pesquisa converterá apenas os 4 primeiros espaços em uma guia e permitirá o seguinte ...
Você precisa repetir o comando. Quantas vezes? Até você receber um pattern not found
. Ainda não consigo pensar em uma maneira de automatizar o processo. Mas se você fizer:
`10@:`
Você provavelmente já terminou. Este comando repete a última pesquisa / substituição por 10 vezes. Não é provável que o seu programa tenha tantos recuos. Se tiver, basta repetir novamente @@
.
Agora, apenas para completar a resposta. Sei que você pediu o contrário, mas nunca sabe quando precisa desfazer as coisas.
2 - Você tem abas e deseja espaços.
Primeiro, decida a quantos espaços você deseja converter suas guias. Digamos que você queira que cada guia tenha 2 espaços. Você então faz:
:set ts=2
:set et
:%retab!
Isso teria o mesmo problema com as strings. Mas como seu melhor estilo de programação para não usar guias rígidas dentro de strings, você realmente está fazendo uma coisa boa aqui. Se você realmente precisa de uma guia dentro de uma string, use \t
.
sed "s/ +/`echo -e '\t'`/g" < input.py > output.py
) parece converter todos os espaços, não apenas espaços iniciais. No segundo exemplo (sed "s/^ +/`echo -e '\t'`/g" < input.py > output.py
), ele substitui apenas o primeiro espaço de cada linha por uma guia e deixa o restante deles.