É possível substituir apenas "guias iniciais" por um número definido de espaços por guia? Estou definindo uma guia inicial como aquela que é precedida apenas por tabulações ou espaços. Estou definindo uma guia inicial ou de recuo como uma que é precedida apenas por espaços em branco.
Eu tenho a seguinte linha no meu .nexrc
, cribbed deste aqui . Ele percorre as linhas entre as linhas que contêm a marca a
e a marca b
através de um filtro. que substitui as guias.
map \2 'a!'b pr -te2
No entanto, ele substitui bem as tabulações não iniciais com dois espaços, o que não é ideal, pois às vezes é necessária uma tabulação literal.
Existe uma maneira fácil e portátil de substituir as guias iniciais apenas com um número definido de espaços por guia?
O script perl a seguir (que pode ser reduzido a um one-liner) faz o trabalho de substituir as guias iniciais por uma largura fornecida na linha de comando, mas depende da disponibilidade do Perl e leva tempo quadrático (se o arquivo não consistir em nada mas abas).
#!/usr/bin/env perl
use strict;
use warnings;
my ($width) = @ARGV;
$width //= 2;
my $replacement = ' ' x $width;
while (<>) {
while (s/^(\s*)\t/$1$replacement/g) { }
print;
}
Aqui está um exemplo do que eu quero que aconteça. ^I
refere-se a um byte de tabulação e #
é um marcador de largura zero para o início de uma linha. A linha abaixo é uma régua de bytes.
ANTES DA:
#^I^I ^Ia^Ib
# 1 23 45 67
DEPOIS (largura da guia de 2)
# a^Ib
#12345678 90
DEPOIS (largura da guia de 4)
# a^Ib
#12345678901234 56