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?


Odpowiedzi:


109

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

:g/ERROR

i na odwrót:

:g!/Error

lub równoważnie:

:v/Error

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ń.


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.


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


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

1

Jakiś hackerski sposób na zrobienie tego:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.