Kiedy uruchamiam grep "keyword" -n
i otrzymuję następującą listę wyników:
a/b/c:10: keyword
a/b/c:70: keyword
a/b/d:50: keyword
Jak mogę otworzyć jeden z plików (na przykład drugi na liście) w znalezionym wierszu?
Teraz po prostu kopiuję dane wyjściowe za pomocą myszy, a następnie kopiuję je, vim
a następnie dodam +
z numerem linii, który kopiuję. (co oznacza, że piszę vim a/b/c +70
przy użyciu kopii myszy, aby uzyskać nazwę pliku, i innej kopii myszy, aby uzyskać numer wiersza [lub po prostu kopiuję go ręcznie, gdy jest wystarczająco krótki])
Czy można to zrobić za pomocą skrótu klawiaturowego?
command-line
vim
grep
CIsForCookies
źródło
źródło
echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset
.Odpowiedzi:
Dwie rzeczy:
Vim ma pewne wsparcie dla
grep
.Jeśli otworzysz Vima i zrobisz to
:grep keyword ...
, Vim zapełni listę poprawek wynikami i przejdzie do pierwszego pliku. Następnie możesz przejść do n- tego wpisu za pomocą:cc n
(i innych poleceń).Możesz wypełnić powyższą listę poprawek, używając danych wyjściowych grep:
A następnie użyj wyżej wymienionych poleceń nawigacyjnych szybkiej naprawy.
Albo jest to prostsze niż ręczne bawienie się wyjściem grep.
Alternatywnie do (2) możesz zapisać wyjście grep do pliku i zamiast tego użyć tego pliku, jeśli uważasz, że niekoniecznie otworzysz Vima po:
źródło
grep -n
(<filename>:<line>: ...
). Używam zbiegającej się wtyczki dla Git, a potem chodzi o:Gstatus
przejście do żądanego pliku i wciśnięcie Enter.grep alias
aby zawsze używać kolorów, i to z jakiegoś powodu złamało-q >()
opcję ...Możesz to zrobić, jeśli nie było już obsługi grep, ponieważ @muru odpowiedział:
Można go
git grep
na przykład użyć z innym poleceniem .Możesz także otworzyć wyjście w buforze i użyć na nim „bufora”.
Zobacz sekcję szybkich instrukcji w podręczniku na ten temat.
źródło