Wie kann ich angesichts des Ergebnisses von grep -n vim in dieser bestimmten Zeile öffnen? (nur mit Tastatur)

9

Wenn ich laufe grep "keyword" -nund die folgende Ergebnisliste erhalte:

a/b/c:10:    keyword
a/b/c:70:    keyword
a/b/d:50:    keyword

Wie kann ich eine der Dateien (z. B. die zweite in der Liste) in der gefundenen Zeile öffnen?

Ich kopiere jetzt einfach die Ausgabe mit meiner Maus und kopiere sie danach vimund füge sie dann +mit der Zeilennummer hinzu, die ich kopiere. (Das heißt, ich schreibe vim a/b/c +70mit der Mauskopie, um den Dateinamen zu erhalten, und mit einer anderen Mauskopie, um die Zeilennummer zu erhalten [oder ich kopiere sie einfach von Hand, wenn sie kurz genug ist])

Gibt es eine Möglichkeit, dies mit einer Tastenkombination zu tun?

CIsForCookies
quelle
Sie können so etwas ausprobieren : echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
Wenn Sie Vim effizienter nutzen möchten, besuchen Sie auch die dedizierte Vi- und Vim Stack Exchange-Site.
Muru

Antworten:

13

Zwei Dinge:

  1. Vim hat Unterstützung für grep.

    Wenn Sie Vim öffnen und dies tun :grep keyword ..., füllt Vim die Quickfix-Liste mit den Ergebnissen und springt zur ersten Datei. Sie können dann mit (und anderen Befehlen) zum n- ten Quickfix-Eintrag springen :cc n.

  2. Sie können die oben genannte Quickfix-Liste mit der Ausgabe von grep füllen:

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

    Verwenden Sie dann die oben genannten Quickfix-Navigationsbefehle.

Beides ist einfacher als das manuelle Herumspielen mit der Ausgabe von grep.

Alternativ zu (2) können Sie die Ausgabe von grep in einer Datei speichern und stattdessen diese Datei verwenden, wenn Sie der Meinung sind, dass Sie Vim nicht unbedingt nachher öffnen müssen:

grep ... | tee log
vim -q log
muru
quelle
Der Versuch, dieselbe Methode für den Git-Status zu verwenden, ohne Erfolg :( - vim -q <(Git-Status | grep geändert)
CIsForCookies
3
@CIsForCookies Das wird nicht das gleiche Format wie grep -n( <filename>:<line>: ...) haben. Ich benutze das flüchtige Plugin für Git und gehe dann :Gstatuszur gewünschten Datei und drücke die Eingabetaste.
Muru
Übrigens habe ich mein ~ / .bashrc so bearbeitet grep alias, dass immer Farben verwendet werden, und das hat aus irgendeinem Grund die -q >()Option gebrochen ...
CIsForCookies
2

Sie könnten dies tun, wenn es keine Unterstützung für grep gäbe, da @muru antwortete:

:cexpr system("grep -n keyword")

Es kann beispielsweise mit einem anderen Befehl verwendet werden git grep.

Sie können die Ausgabe auch in einem Puffer öffnen und "cbuffer" darauf verwenden.

Siehe dazu den Quickfix- Abschnitt aus dem Handbuch.

max630
quelle