jak wykonać wyszukiwanie vim odwrotne wyszukiwanie wszystkich linii bez tekstu

18

z grepem mogę wykonać grep -v „moje wyszukiwanie”, aby uzyskać wszystkie linie bez „mojego wyszukiwania”

z sed mogę sed '/ baz /! s / foo / bar / g', aby znaleźć zamień tekst na liniach bez baz

Czy istnieje sposób na zrobienie tego samego vim. I czy jest to możliwe, ale bez składni „s ///”. Używając tylko składni wyszukiwania „/”.

nelaaro
źródło

Odpowiedzi:

29
:g/pattern/

pasuje do wszystkich linii, w których znaleziono wzór.

:v/pattern/

robi coś przeciwnego. Zobacz :h globalpo więcej szczegółów.

Możesz użyć tego w następujący sposób:

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

wstawić „wzorzec nie znaleziony -” do każdej linii, która nie ma „wzorca” lub

:v/pattern/s/nrettap/pattern

zamieniać „nrettap” na „wzorzec” w każdej linii, która nie ma „wzorca”.

Wymyślone przykłady, tak.

romainl
źródło
Lol'd na „nrettap”.
UncleZeiv
1

Korzystanie z polecenia: v Edycja Tradycyjne podejście do znajdowania wierszy niezgodnych ze wzorcem polega na użyciu polecenia : v :

:v/Warning/p

Świetną sztuczką podczas pracy z dużym plikiem dziennika, w którym chcesz odfiltrować jak najwięcej niepotrzebnych wierszy przed rozpoczęciem prawdziwego wyszukiwania, jest zapisanie pliku pod tymczasową nazwą i usunięcie wszystkich niepasujących do niego wierszy:

:sav junk.log
:v/warning/d

Edytujesz teraz klon oryginalnego pliku, a wszystkie linie nie pasujące do „ostrzeżenia” zostały usunięte i możesz je edytować do woli.

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

selfboot
źródło