web-dev-qa-db-fra.com

Comment rechercher récursivement un mot dans l'ensemble du projet / dossier?

Supposons que je recherche une classe JFactory dans un dossier et ses sous-répertoires.

Comment puis-je déposer ce fichier qui contient class JFactory?

Je ne veux pas remplacer ce mot mais je dois trouver ce fichier qui contient class JFactory.

53
shibly
:vimgrep /JFactory/ **/*.Java

Vous pouvez remplacer le motif /JFactory/ avec /\<JFactory\>/ si vous voulez une correspondance complète avec Word. :vim est un raccourci pour :vimgrep.

Si JFactory ou \<JFactory\> est votre modèle de recherche actuel (par exemple, vous avez tapé * sur une occurrence), vous pouvez utiliser un modèle de recherche vide: :vimgrep // **/*.Java, il utilisera le dernier modèle de recherche à la place. Pratique!

Attention: :vimgrep déclenchera les autocmds s'il est activé. Cela peut ralentir la recherche. Si vous ne voulez pas que vous puissiez le faire:

:noautocmd vimgrep /\<JFactory\>/ **/*.Java

ce qui sera plus rapide. Mais: cela ne déclenchera pas la coloration syntaxique ou n'ouvrira pas les fichiers gz décompressés, etc.

Notez que si vous voulez qu'un programme externe grep votre modèle, vous pouvez faire quelque chose comme ceci:

:set grepprg=ack
:grep --Java JFactory

Ack est une alternative écrite en Perl à grep. Notez qu'alors, vous devrez passer aux expressions régulières Perl.

Une fois la commande de votre choix retournée, vous pouvez parcourir les résultats de la recherche avec les commandes décrites dans la documentation Vim à :help quickfix. Chercher :cfirst, :cnext, :cprevious, :cnfile, etc.

Mise à jour 2014: il existe désormais de nouvelles façons de le faire avec the_silver_searcher ou the_platinum_searcher et soit ag.vim ou unite.vim plugins.

76
Benoit

À partir du dossier racine du projet, exécutez ce qui suit:

grep -H -r 'what_you_search' * | less

Vous obtiendrez une liste des dossiers et des lignes correspondantes avec cette chaîne.

16
Karlo Smid

The Silver Searcher ( https://github.com/ggreer/the_silver_searcher ) fortement recommandé, vraiment rapide!

installer

Sudo pacman -S the_silver_searcher  // Arch Linux 
Sudo apt install silversearcher-ag  // ubuntu

utilisation

$ ag keywords

s'intègre à vim

rking/ag.vim ( https://github.com/rking/ag.vim )

après l'installation

:Ag keywords
8
Anthony Zhan

Jetez un œil à ctags et cscope qui vous permettent de passer aux définitions de classe et de fonction, et de trouver où ces fonctions/classes sont utilisées.

2
Ken

Ce script peut aider: Filesearch .

1
Jeet

Ouvrez la fenêtre de ligne de commande en:

Esc - pour vous assurer que vous êtes en mode Normal

tapez q, tapez:

la ligne de commande devrait s'ouvrir (comme un fichier tmp pour écrire la commande, vous pouvez naviguer comme vous le feriez normalement dans n'importe quel fichier vim ...

tapez i pour entrer en mode d'insertion

cet exemple recherchera la chaîne to_srch sous le répertoire courant pour tous les types de fichiers de type '. js' et '. Java' mais omettra tous les chemins de fichiers contenant la chaîne node_modules

:g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.Java' -not -path '*node_modules/*'`

Maintenant, quand vous: copen, vous pouvez naviguer avec les touches fléchées à travers les résultats de sarch ...

vous pouvez également les définir dans .vimrc

    " how-to search recursively under the current dir for the files of type js and Java but omit the
    " node_modules file paths
    ":g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.Java' -not -path '*node_modules/*'`
    " reminder open the quick fix window by :copen 20
    " reminder close the quick fix window by :ccl

vous pouvez omettre le premier: q/to_srch/Je l'utilise pour surligner automatiquement les résultats de la recherche car j'ai "mis hlsearch" dans mon ~/.vimrc

Tout indice permettant d'activer automatiquement les résultats de srch à partir de vimgrep ou dans vimrc sera très apprécié ...

0
Yordan Georgiev