Biorąc pod uwagę wynik grep -n, jak mogę otworzyć vima w tej konkretnej linii? (używając tylko klawiatury)

9

Kiedy uruchamiam grep "keyword" -ni 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, vima następnie dodam +z numerem linii, który kopiuję. (co oznacza, że ​​piszę vim a/b/c +70przy 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?

CIsForCookies
źródło
Można spróbować coś takiego: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
Ponadto, jeśli chcesz bardziej efektywnie korzystać z Vima, zajrzyj na dedykowaną stronę Vi i Vim Stack Exchange.
muru,

Odpowiedzi:

14

Dwie rzeczy:

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

  2. Możesz wypełnić powyższą listę poprawek, używając danych wyjściowych grep:

    vim -q <(grep -n keyword ...)
    

    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:

grep ... | tee log
vim -q log
muru
źródło
Próba użycia tej samej metody dla statusu git, bezskutecznie :( - vim -q <(status git | grep zmodyfikowany)
CIsForCookies
3
@CIsForCookies To nie będzie w tym samym formacie co grep -n( <filename>:<line>: ...). Używam zbiegającej się wtyczki dla Git, a potem chodzi o :Gstatusprzejście do żądanego pliku i wciśnięcie Enter.
muru
BTW, edytowałem mój ~ / .bashrc, grep alias aby zawsze używać kolorów, i to z jakiegoś powodu złamało -q >()opcję ...
CIsForCookies
2

Możesz to zrobić, jeśli nie było już obsługi grep, ponieważ @muru odpowiedział:

:cexpr system("grep -n keyword")

Można go git grepna 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.

max630
źródło