Como remover texto do vim

1

Eu quero remover todas as palavras que terminam com abc

Exemplo:

111abc 222def 333abc 444def 555abc 666def

A partir daqui, quero excluir todas as palavras que terminam com abc.

então eu tentei isso

:s/abc//g

Mas isso substituirá apenas o abc

Como deletar todas as palavras que terminam com abc?

    
por max 15.09.2012 / 12:21

3 respostas

4

Se você quiser remover a palavra inteira, e se sua amostra estiver completa, você deseja usar este regexp:

:s/[0-9]\{3\}abc//g

Remove todos os bits que consistem em 3 dígitos seguidos por abc .

    
por 15.09.2012 / 12:24
6

Se todas as palavras que você deseja excluir consistirem em três dígitos seguidos pela seqüência de caracteres "abc", você pode ir com a sugestão de @ m4673r. Para uma abordagem mais geral, sugiro isso:

:s/\<\S*abc\>//g

Isso removerá qualquer palavra (independentemente de caracteres / comprimento) que termine com a sequência de caracteres "abc" ( 111abc , bem como FOOBARabc ou apenas abc ).

    
por 15.09.2012 / 12:53
1
A resposta de

Ansgar é bem clara.
Vou explicar suas partes para torná-lo uma metodologia mais do que uma receita, porque acho que expressões regulares são de alguma forma enigmáticas.

:s/\<\S*abc\>//g

é um comando de substituição vim.
Significa "na linha atual (use% s para linhas todas ) substituir as correspondências da expressão regular \<\S*abc\> (delimitadas pelas duas primeiras" / "s pelo texto contido entre as duas últimas "/" s, isto é, nada. O final "g" é global e significa substituir todas as correspondências em vez de apenas a primeira.

O regexp é colocado entre colchetes de escape \< e \> . Estes são os limites word , o que significa que o regexp corresponderá ao texto apenas dentro de palavras isoladas. Pense que o vim irá dividir o texto em palavras antes de tentar corresponder a cada um. A maiúscula com escape S é para o espaço não-wites. \s (em letras minúsculas) corresponde a espaços em branco (espaços e tabulações), enquanto \S (maiúsculas) corresponde a todos os outros.
Portanto, \S* significa "caracteres sem espaço em branco zero ou mais vezes". A parte abc simplesmente corresponde a essa sequência de caracteres exatos.

Juntando tudo, o regexp corresponde a palavras inteiras compostas de qualquer sequência de caracteres seguidos por abc , conforme max desejado.

Por causa da forma como o vim pensa em palavras, a qualquer sequência de caracteres não conterá espaços e outros caracteres que são limites de palavras. A lista outros personagens depende do tipo de arquivo que está sendo editado e pode ser visto digitando :set iskeyword enter . Esta é a informação usada para dividir o texto em palavras.

    
por 18.09.2012 / 17:55

Tags