W przypadku korzystania z grep z VIM, jak przejść do wyników?

32

Korzystając z wtyczki grep do VIM, mogę przeszukiwać bieżący katalog pod kątem wszystkich wystąpień ciągu w zestawie plików, takich jak to:

:grep Ryan *.txt

To daje coś takiego:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

Naciśnięcie klawisza enter powoduje powrót do edytora. Naprawdę chcę otworzyć jeden z tych plików i przejść do miejsca, w którym znaleziono łańcuch. Czy jest na to sposób? Ta 1 of 3część sprawia, że ​​myślę, że istnieje sposób na tabulowanie wyników, ale nie wiem, jakie polecenia są dla mnie dostępne. Czy ktoś może rzucić na to trochę światła?

Marplesoft
źródło

Odpowiedzi:

34

Kiedy naciśniesz ENTER, powinieneś spojrzeć na 3 linię pliku1.txt. Aby przejść do następnego meczu, wykonaj :cn; aby przejść do poprzedniego meczu, wykonaj :cp. Wykonanie :copenotworzy okno zawierające listę dopasowań. Przesuń kursor do żądanego dopasowania i naciśnij ENTER, aby przejść do tego dopasowania.

Aby uzyskać więcej informacji o korzystaniu :grep, zobacz

:help grep
:help quickfix.txt

Pisanie :cni :cpprzechodzenie do przodu i do tyłu na liście poprawek może być niewygodne, więc używam tych mapowań:

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

Ponadto :greppolecenie nie jest wtyczką; to część Vima.

garyjohn
źródło
Świetna odpowiedź, dzięki! BTW, czy możesz przeprowadzić rekurencyjne wyszukiwanie w folderach za pomocą vim grep?
Marplesoft
Dopóki pracujesz w systemie uniksowym, możesz dodawać do Vima wszelkie argumenty, :grepktóre dodajesz do greppolecenia wykonywanego z powłoki. Tak więc możesz przeprowadzić rekurencyjne przeszukiwanie wszystkich plików .txt w bieżącym katalogu i poniżej za pomocą :grep -R --include=*.txt Ryan .. Możesz także przeprowadzić wyszukiwanie rekurencyjne za pomocą :vimgreppolecenia Vima , ale argumenty są różne i rzadko używam, ponieważ jest wolniejszy niż :grep.
garyjohn