W długim pliku chciałbym wyszukać wzór, który będzie pasował z grubsza około 200 linii. Dopasowane linie znajdują się w losowych miejscach w pliku.
Kiedy linia pasuje, tylko sama linia jest istotna, bez kontekstu powyżej lub poniżej.
Zwykle przeszukiwałbym /
i przeskakiwał mecze n
.
Ale to oznacza, że na ekranie jest tylko jedna lub dwie odpowiednie linie na raz.
Czy istnieje sposób na ukrycie wszystkich niepasujących wierszy podczas przeglądania listy wierszy wyników?
Podejście brutalnej siły polegałoby na usunięciu wszystkich niepasujących wierszy i cofnięciu tego usunięcia później. Ale to brzydkie na różne sposoby, nawet jeśli nie skończyłoby się to ciągłym cofaniem ...
:vimgrep
można skrócić do:vim
:ccl[ose]
lub jak zwykle zamykasz bufor (np. Przełączasz się na niego i:bd
). Możesz ponownie otworzyć bufor Quickfix, uruchamiając go:cw[indow]
ponownie, a on użyje twoich ostatnich wyników vimgrep.Możesz wyświetlić listę wszystkich pasujących linii za pomocą
(
:print
Polecenie można pominąć; jest to ustawienie domyślne:g
).źródło
g/REgexp/p
) ... Problem polega na tym, że nie możesz łatwo wskoczyć na jeden z meczów ...g
. Zakładam, że jest to wzór globalny. Zazwyczaj szukam VI z ukośnikiem,/pattern
a to by znaleźć wszystkie wystąpienia. Można do nich nawigować, naciskając literęn
:g[lobal]
które przyjmuje wzorzec jako argument. Wszystkie szczegóły znajdziesz na:help :global
.Możesz użyć opcji
foldmethod
i,foldexpr
aby złożyć nieistotne linie.Ostatnie wyszukiwanie jest zapisywane w
@/
rejestrze. Możesz więc łatwo złożyć wszystko, co się nie zgadza w ten sposób (tylko dla dopasowań jednowierszowych):Bardziej zaawansowane metody, takie jak dodawanie wielu poziomów składania dla linii kontekstu, które można pokazać lub ukryć, lub dopasowywanie wielu linii, można znaleźć na Wiki Vim Tips .
źródło
set foldlevel=0
potrzebny? Ale może to jest domyślne.:tab sp
uzyskuję nowy rzut pliku na plik. Następnie powrót jest tak prosty, jak:close
i jakikolwiek inny sposób, aby zabić kartę.Jeśli kolejność nie ma znaczenia, po prostu przesuń linie.
Aby uzyskać więcej pomocy, zobacz:
źródło
:g/pat/m$
(przesuń dopasowane linie na koniec) jest również OK,[d] usuń wszystkie linie, które nie pasują (!) do wzorów:
lub nawet prościej (dzięki za komentarze „B Layer”):
źródło
:v
niż:g!
. (Nie pamiętam, kiedy ostatni raz widziałem ten ostatni używany, TBH!)Jeśli chcesz wyświetlić listę wszystkich pasujących wierszy (jak w mojej drugiej odpowiedzi), a następnie przejść do jednego konkretnego dopasowania, moja wtyczka FindOccurrence zapewnia
[/
odwzorowanie tego (i[n
ostatniego wzorca wyszukiwania zamiast zapytania o jeden).[/pattern
listy takie jak:g/pattern
, ale następnie pytają o numer meczu, do którego należy przejść.źródło
Innym sposobem jest użycie
:h :ilist
, używam go, aby uzyskać przegląd strony podręcznika man. jego wynik wygląda następująco:Oto mała funkcja, która pozwala wybrać przejście do linii wyników według indeksu:
Można go użyć w następujący sposób:
źródło