como fazer uma pesquisa vim pesquisa inversa para todas as linhas sem texto

18

com grep eu posso fazer um grep -v "minha pesquisa" para obter todas as linhas sem "minha pesquisa"

com sed eu posso sed '/ baz /! s / foo / bar / g' para encontrar substituir texto nas linhas sem baz

Existe uma maneira de fazer a mesma coisa vim. E é possível, mas sem a sintaxe "s ///". Usando apenas a sintaxe de pesquisa "/".

nelaaro
fonte

Respostas:

29
:g/pattern/

corresponde a todas as linhas em que o padrão é encontrado.

:v/pattern/

faz o oposto. Veja :h globalpara mais detalhes.

Você pode usá-lo assim:

:v/pattern/norm Ipattern not found - <CR>

para acrescentar "padrão não encontrado -" a todas as linhas que não possuem "padrão" ou

:v/pattern/s/nrettap/pattern

para substituir "nrettap" por "padrão" em todas as linhas que não possuem "padrão".

Exemplos planejados, sim.

romainl
fonte
Eu ri no "nrettap".
UncleZeiv
1

Utilizando o: v commandEdit A abordagem tradicional para localizar linhas que não correspondem a um padrão está usando o comando : v

:v/Warning/p

Um truque interessante ao trabalhar com um arquivo de log grande em que você deseja filtrar o máximo de linhas irrelevantes possível antes de iniciar sua pesquisa real é salvar o arquivo com um nome temporário e excluir todas as linhas não correspondentes:

:sav junk.log
:v/warning/d

Agora você está editando um clone do seu arquivo original com todas as linhas que não correspondem ao "aviso" removidas e pode editá-lo à vontade.

Ref: https://vim.fandom.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches

auto-inicialização
fonte