Substitua cada guia APENAS no início de cada linha por espaços

5

Portanto, substituir todas as guias em um arquivo por espaços não é difícil.
No vim, por exemplo, posso fazer %s/\t/ /gc

E se eu quiser substituir os que estão no começo de cada linha, não o do meio, posso fazer %s/^\t/ /gc

Mas se houver uma linha com uma e linhas com mais guias no início e linhas com guias no meio, e eu quiser substituir cada guia no início de uma linha por espaços para manter a estrutura de recuo do arquivo é o que eu não sei fazer.

No vim ou sed ou geralmente usando expressões regulares.

    
por Ali 23.12.2016 / 20:40

1 resposta

7

Você pode usar o registro de avaliação para substituir qualquer número de guias pelo número apropriado de espaços. Por exemplo:

:s/^\t\+/\=repeat('    ',len(submatch(0)))

Explicação:

:s/                                         " Replace
   ^                                        " At the start of a line
    \t\+                                    " One or more tabs
        /\=                                 " With the following evaluated as vimscript:
           repeat('    ',len(submatch(0)))  " 4 spaces times the length of the previously matched string
    
por 23.12.2016 / 20:56