Isso excluiria todas as linhas que não contiverem foo .
:g/^\(.*foo\)\@!.*$/d
Em vez disso, você também pode usar :v para reverter o sentido do padrão de pesquisa.
:v/\(foo\)/d
Você pode ler mais sobre a forma como :g e :v funcionam aqui .
E mais sobre definição de intervalos, uso de metacaracteres, etc. para pesquisar e substituir aqui .