Ukryj wszystkie (nie) pasujące linie w Vimie

87

Czy można pokazać / ukryć wszystkie pasujące linie w vi lub Vimie? Nie wyróżniaj, ale pokazuj tylko te linie.

Na przykład mam tekst ze słowem słowo ERROR. Jak sprawić, by pokazywał tylko wiersze zawierające ERRORi jak tylko wiersze bez ERROR?

Czy istnieje rozwiązanie bez usuwania wszystkich pasujących wierszy, a następnie po prostu cofania go?

Alex Bolotov
źródło

Odpowiedzi:

109

Czy znasz :globalpolecenie? Czy to robi, co chcesz?

:g/ERROR

i na odwrót:

:g!/Error

lub równoważnie:

:v/Error
user55400
źródło
19
To nie jest zbyt dobre. Po przewinięciu do dołu polecenie kończy się i wszystko pojawia się ponownie. Tak naprawdę nie ukrywa tych treści.
Kan Li,
@KanLi naciśnij, g<aby zobaczyć ponownie, lub @:jeśli nie masz uruchamiania i poleceń.
D. Ben Knoble
53

Innym podejściem, w zależności od twojego przypadku użycia, byłoby użycie vimgrep i jego wyników w quickfix . Możesz wykonać następujące czynności:

:vimgrep pattern %przeszuka bieżący plik i przeniesie Cię do pierwszego wyniku wyszukiwania. Co ważniejsze, wyniki są również umieszczane na „liście quickfix”.

:copenotworzy listę quickfix w oddzielnym oknie quickfix. Będziesz miał więc oddzielne okno ze wszystkimi liniami z twojego ostatniego vimgrepa. W oknie quickfix możesz nacisnąć klawisz Enter lub dwukrotnie kliknąć linię, aby przejść do odpowiedniej linii w oryginalnym pliku.

:colderpozwoli ci wrócić do starszych list quickfix (starszych wyników vimgrep). I :cnewerprzechodzi do nowszych wyników wyszukiwania.

Zauważ, że lista quickfix jest również aktualizowana podczas pracy :make(dlatego nazywa się quickfix do naprawiania błędów). Z tego powodu istnieje również alternatywa dla listy szybkich poprawek, zwana „listą lokalizacji”. Aby go użyć zamiast użyć :lvimgrep, a następnie użyć polecenia L-prefiksem zamiast poleceń C-prefiksem - :lopen, :lolder, :lnewer.

Oczywiście możesz zrobić o wiele więcej. Zobacz, :help quickfixaby uzyskać więcej informacji.

PS, powiedziałeś, że nie chcesz metody, która usuwa linie, a następnie je cofa. Ale skoro zaznaczyłeś g/ERRORjako odpowiedź, pomyślałem, że wskazałbym szybką i nieprzyjemną metodę g!/ERROR/d. Następnie możesz łatwo cofnąć to za pomocą u. Również FYI, możesz to zrobić:set hlsearch aby podświetlić wzorce dopasowane do :gpoleceń.

studgeek
źródło
1
Dzięki za wskazówkę dotyczącą „: g! / ERROR / d” lepszą niż zaakceptowana odpowiedź.
VinGarcia
Czy możesz to zrobić z liniami nie pasującymi do wzoru?
Jacktose
26

Najlepszym sposobem na to jest->

:vimgrep /something/g % | copen

Spowoduje to otwarcie listy dopasowań słowa kluczowego, a także wyświetlenie tylko pasujących wierszy w oknie quickfix.

Zastąp% ścieżką do pliku, jeśli nie bierzesz pod uwagę bieżącego pliku.

Shivendra
źródło
1
Zastąp% ścieżką pliku, jeśli nie bierzesz pod uwagę bieżącego pliku.
Shivendra
Czy możesz to zrobić z liniami nie pasującymi do wzoru?
Jacktose
1

:vimgrep /something/g % | copendziała świetnie. Również :g/<pattern>/dmoże być używana do usuwania linii z wzorca

sevvalai
źródło
To jest dokładnie inna odpowiedź na to pytanie.
Shivendra
1

jeśli zdarzy ci się użyć, fzfmożesz użyć:

  • :Lines we wszystkich otwartych plikach
  • :BLines tylko w otwartym buforze
  • :Rg [pattern] za pomocą ripgrep
minusf
źródło
1

Jakiś hackerski sposób na zrobienie tego:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
Boris Churzin
źródło
0

Prawdopodobnie masz na myśli polecenie w less vi vim & / pattern /, które pokazuje linie zawierające / pattern / (jak grep).

charkh
źródło