Prefira apenas linhas com texto no vim

3

Eu tenho uma lista como abaixo:

words
more words
here's more

skip space
words here
bananza!


D: look
more spaces
and words!

Como posso inserir coisas no início apenas das linhas com texto? :%norm 0i* colocará * bem, mas como faz todas as linhas, também recebe as linhas vazias. Existe alguma maneira de fazer isso sem ter que voltar e limpar esses espaços em branco (eu sei que eles seriam apenas *, por isso não deve ser difícil de fazer, mas é um trabalho extra)

    
por Rob 12.10.2011 / 20:49

2 respostas

6

Algo como isso deve funcionar:

:%s/^\(.*[^\n]\)$/* /

EDIT Desde que você solicitou um detalhamento da expressão regular:

:% Todas as linhas

s/ Início do comando substituto; comece o padrão

^ Início da linha

\( Início do grupo que queremos preservar. Isso será importante mais tarde.

.* Qualquer número de caracteres

[^\n] Algum personagem além da nova linha

\) Fim do grupo

$ Fim da linha

/ Fim do padrão, início da substituição

* Insira * , depois o primeiro grupo que selecionamos à esquerda.

/ Fim da substituição e comando

    
por 12.10.2011 / 21:10
3

Tente

:g/\S/s/^/* /

g/\S/ é um operador de intervalo (análogo a % , exceto que seleciona todas as linhas com um caractere não em branco).

s/^/* / insere "*" no início de cada linha selecionada.

Isso evita o problema com a resposta de @ objectified de colocar o prefixo na primeira linha de uma sequência de linha em branco dupla.

O seguinte acrescenta "*" no final de cada linha selecionada.

:g/\S/s/$/ */
    
por 14.10.2011 / 17:04

Tags