Lorsque vous utilisez grep de VIM, comment accéder aux résultats?

32

Lorsque j'utilise le plugin grep pour VIM, je peux rechercher dans le répertoire actuel toutes les occurrences d'une chaîne dans un ensemble de fichiers, comme ceci:

:grep Ryan *.txt

Cela produit quelque chose comme ceci:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

Si j'appuie sur Entrée, cela me ramène simplement à mon éditeur. Ce que je veux vraiment faire, c'est être capable d'ouvrir un de ces fichiers et de sauter à l'endroit où la chaîne a été trouvée. Y a-t-il un moyen de faire cela? La 1 of 3partie me fait penser qu'il existe un moyen de parcourir les résultats, mais je ne sais pas quelles commandes sont disponibles pour moi. Quelqu'un peut-il faire la lumière là-dessus?

Marplesoft
la source

Réponses:

34

Lorsque vous appuyez sur ENTRÉE, vous devez regarder la ligne 3 de file1.txt. Pour passer au match suivant, exécutez :cn; pour passer au match précédent, exécutez :cp. L'exécution :copenouvrira une fenêtre contenant la liste des correspondances. Déplacez le curseur sur la correspondance souhaitée et appuyez sur ENTER pour passer à cette correspondance.

Pour plus d'informations sur l'utilisation :grep, voir

:help grep
:help quickfix.txt

Taper :cnet :cpavancer et reculer dans la liste des correctifs peut être gênant, donc j'utilise ces mappages:

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

De plus, la :grepcommande n'est pas un plugin; cela fait partie de Vim.

garyjohn
la source
Excellente réponse, merci! BTW, pouvez-vous faire une recherche récursive dans les dossiers avec vim grep?
Marplesoft
Tant que vous utilisez un système Unix, vous pouvez ajouter à Vim les arguments :grepque vous souhaitez ajouter à une grepcommande exécutée à partir du shell. Ainsi, vous pouvez effectuer une recherche récursive dans tous les fichiers .txt dans et sous le répertoire actuel avec :grep -R --include=*.txt Ryan .. Vous pouvez également effectuer une recherche récursive en utilisant la :vimgrepcommande de Vim , mais les arguments sont différents et j'utilise rarement car elle est plus lente que :grep.
garyjohn