Étant donné le résultat de grep -n, comment puis-je ouvrir vim dans cette ligne spécifique? (en utilisant uniquement le clavier)

9

Lorsque je cours grep "keyword" -net que j'obtiens la liste de résultats suivante:

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

Comment puis-je ouvrir l'un des fichiers (disons le 2e de la liste) dans la ligne qu'il a trouvée?

Je viens maintenant de copier la sortie à l'aide de ma souris, et de la copier après vim, puis d'ajouter +avec le numéro de ligne que je copie. (ce qui signifie que j'écris en vim a/b/c +70utilisant la copie de la souris pour obtenir le nom du fichier, et une autre copie de la souris pour obtenir le numéro de ligne [ou je le copie simplement à la main, quand c'est assez court])

Existe-t-il un moyen de le faire avec un raccourci clavier?

CIsForCookies
la source
Vous pouvez essayer quelque chose comme ça: echo a/b/c:70: keyword | awk '{print $1}' | sed 's,:$,,' | sed 's,:, +,' | xargs vim && reset.
Arkadiusz Drabczyk
2
De plus, si vous souhaitez utiliser Vim plus efficacement, consultez le site dédié Vi et Vim Stack Exchange.
muru

Réponses:

14

Deux choses:

  1. Vim a un certain support pour grep.

    Si vous ouvrez Vim et que vous le faites :grep keyword ..., Vim remplit la liste des correctifs rapides avec les résultats et passe au premier fichier. Vous pouvez ensuite passer à la n ième entrée de correction rapide avec :cc n(et d'autres commandes).

  2. Vous pouvez remplir la liste de correctifs précités en utilisant la sortie de grep:

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

    Et puis utilisez les commandes de navigation quickfix mentionnées ci-dessus.

Soit est plus simple que de jouer avec la sortie de grep manuellement.

Comme alternative à (2), vous pouvez enregistrer la sortie de grep dans un fichier et utiliser ce fichier à la place, si vous pensez que vous n'ouvrirez pas nécessairement Vim après:

grep ... | tee log
vim -q log
muru
la source
Essayer d'utiliser la même méthode sur le statut git, en vain :( - vim -q <(statut git | grep modifié)
CIsForCookies
3
@CIsForCookies Ce ne sera pas au même format que grep -n( <filename>:<line>: ...). J'utilise le plugin fugitif pour Git, puis c'est une question de :Gstatus, déplacer vers le fichier souhaité et appuyez sur Entrée.
muru
BTW, j'ai édité mon ~ / .bashrc grep alias pour utiliser toujours les couleurs, et cela, pour une raison quelconque, a cassé l' -q >()option ...
CIsForCookies
2

Vous pourriez le faire s'il n'y avait pas déjà de support pour grep comme @muru a répondu:

:cexpr system("grep -n keyword")

Il peut être utilisé avec une autre commande, git greppar exemple.

En outre, vous pouvez ouvrir la sortie dans un tampon et utiliser "cbuffer" dessus.

Voir la section quickfix du manuel à ce sujet.

max630
la source