Je grep souvent un tas de fichiers pour trouver une ligne, puis grep renvoie un résultat. Plutôt que de copier et coller le nom de fichier dans une nouvelle commande, j'aimerais pouvoir ouvrir ce résultat avec un éditeur. Quelque chose comme: grep foo | vim
. Existe-t-il un moyen de le faire en BASH?
17
vim
de lire à partir deSTDIN
:grep foo | vim -
Réponses:
Utilisez
grep -l
pour obtenir simplement le nom de fichier du fichier correspondant et non le texte correspondant, puis combinez-le avecvim
:la source
-q
indicateur degrep
pour vous assurer que grep a bien abouti à un fichier correspondant:grep -q patterns fnames && vim $(grep -l pattern fnames)
vi
plaint, l'OP pourrait ne pas.Vous pouvez utiliser
quickfix
ouerrorfile
figurer dansvim
:Vim ouvrira le premier fichier
/tmp/foo.list
et placera le curseur directement sur la ligne où il afoo
été trouvé. Vous pouvez passer à l'instance suivante en utilisant:cn
et à l'instance précédente en utilisant:cp
.Note latérale : Si vous utilisez déjà
vim
ougvim
, je suggère d'utiliser sagrep
fonctionnalité intégrée . Lisez:help vimgrep
pour plus d'informations.la source
Pour la recherche dans le projet, pas besoin de quitter vim avec Fugitive
autocmd QuickFixCmdPost *grep* cwindow
Ci-dessous, vous pouvez voir un exemple de
:Ggrep config
la source
EDIT: Après avoir lu votre commentaire, je me rends compte que je n'ai pas compris la question au départ. Voici un script simple qui prend votre terme de recherche comme argument et vous demande le chemin de recherche. Si le résultat se trouve dans un seul fichier, il ouvre le fichier pour modification à l'emplacement du résultat de la recherche.
la source
@devnull a eu la bonne réponse dans ce commentaire:
la source
Pour développer la réponse d'Anthon pour un cas où vous avez plus d'une correspondance, il peut être utile dans certains cas d'utiliser
head -1
(à partir de cette réponse ) pour sélectionner uniquement le premier résultat:vim "$(grep -l STRING FILES|head -1)"
la source
Si vous effectuez une commande longue avec grep quelque part au milieu, vous pouvez également faire
la source