Quand utiliser: grep et: vimgrep dans vim?

17

Dans vim, :makeil est facile de générer et de corriger des erreurs, :grepet :vimgrepse comporte comme :make. Mais pourquoi avez-vous besoin de ces deux commandes? Pourquoi ne pas simplement rechercher le motif et appuyer simplement sur n? Quels sont leurs avantages par rapport à la simple recherche?

Qian
la source

Réponses:

17

Comme le dit le doc:

Vim has two ways to find matches for a pattern: Internal and external.

En bref, :vimgreputilise le mécanisme grep de Vim pour lire et rechercher dans les fichiers. :greputilise une commande externe pour réaliser le même travail.

La /recherche concerne uniquement le tampon actuel, tandis que la :[vim]greprecherche dans un modèle de fichiers vous permet de rechercher dans un projet entier à la fois.

Jetez un œil à :h greppour plus d'informations.

nobe4
la source
4

/?recherchez uniquement le tampon courant mais :grepet :vimgrepprenez des fichiers / modèles / globs arbitraires comme arguments.

romainl
la source
4

L' un des avantages de :[vim]grepplus /?est que les résultats se mettent dans la liste des quickfix (ou liste de résultats si vous utilisez :l[vim]grep), cela signifie que vous pouvez tirer vers le haut une liste de tous les matches à l' aide :cl. Vous pouvez ensuite utiliser un nombre pour accéder directement au résultat souhaité dans la liste.

Cela signifie également que vous pouvez utiliser la même commande pour rechercher le tampon actuel :[vim]grep pattern %que pour rechercher l'ensemble de votre base de code, :[vim]grep pattern pathil y a donc une symétrie sympa.

De plus, vous pouvez ensuite vous diversifier et utiliser le Silver Surfer / Ripgrep pour vous donner une recherche très puissante. Ceux-ci peuvent être mappés à la :[vim]grepcommande.

icc97
la source
0

Il y a 3 principaux avantages que je vois

  1. Utiliser un regexmoteur / syntaxe cohérent : L' utilisation :grep/vimgrepvous permet de définir un grepprg, qui peut être défini sur grep/ack/agetc. À l'aide de cela, vous pouvez rechercher le tampon actuel ou plusieurs tampons / fichiers, en utilisant un regexmoteur cohérent . D'un autre côté, si vous utilisez l'/pattern option de vim , vous êtes bloqué sur le moteur regex par défaut de vim, qui a une syntaxe différente de la extended regular expressionsyntaxe. Donc, chaque fois que vous devez rechercher une expression, vous devrez penser / vous rappeler si vous devez utiliser \)ou simplement )et d'autres différences. Cela peut être très ennuyeux ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )

  2. vimgrep remplit une liste de correctifs / emplacements : l'utilisation :grep/vimgrepvous permet de remplir une liste de recherche. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).

    Si vous souhaitez utiliser la liste des emplacements, vous pouvez utiliser un ]qraccourci pour la parcourir si vous avez un plug-in Tim-Popes intact ( https://github.com/tpope/vim-unimpaired )

  3. recherches compliquées dans vim : généralement, si vous devez effectuer des recherches compliquées, vous devrez peut-être utiliser la ligne de commande. Cependant, si vous définissez greprgcorrectement et utilisez une commande telle que [1]

    : vim / pattern1 / find . -type f

    Vous pouvez effectuer des recherches très compliquées et afficher les résultats de la recherche dans votre location listou quickfix list.

[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/

alpha_989
la source