Wann benutzt man: grep und: vimgrep in vim?

16

In vim :makeist es einfach, Fehler zu erstellen und zu beheben, :grepund es :vimgrepverhält sich so :make. Aber warum brauchen Sie diese beiden Befehle? Warum nicht einfach nach dem Muster suchen und einfach drücken n? Was sind die Vorteile von ihnen gegenüber dem reinen Suchen?

Qian
quelle

Antworten:

16

Wie der Doc sagt:

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

Kurz gesagt, :vimgrepverwendet Vims Grep-Mechanismus zum Lesen und Suchen in Dateien. :grepverwendet externe Befehle, um den gleichen Job zu erreichen.

Die /Suche bezieht sich nur auf den aktuellen Puffer, während Sie :[vim]grepein Dateimuster durchsuchen und so in einem gesamten Projekt gleichzeitig suchen können.

Werfen Sie einen Blick auf :h grepfür weitere Informationen.

nobe4
quelle
4

/?Durchsucht aber nur den aktuellen Puffer :grepund :vimgrepnimmt beliebige Dateien / Patterns / Globs als Argumente.

romainl
quelle
4

Ein Vorteil von :[vim]grepover /?ist, dass die Ergebnisse in die Quickfix-Liste (oder die Standortliste, falls Sie sie verwenden :l[vim]grep) aufgenommen werden. Dies bedeutet, dass Sie mit eine Liste aller Übereinstimmungen abrufen können :cl. Sie können dann eine Zahl verwenden, um direkt zum gewünschten Ergebnis aus der Liste zu gelangen.

Dies bedeutet auch, dass Sie zum Durchsuchen des aktuellen Puffers den gleichen Befehl verwenden können :[vim]grep pattern %wie zum Durchsuchen der gesamten Codebasis, :[vim]grep pattern pathsodass eine nette Symmetrie vorliegt .

Darüber hinaus können Sie mit dem Silver Surfer / Ripgrep eine sehr leistungsfähige Suche durchführen. Diese können dem :[vim]grepBefehl zugeordnet werden.

icc97
quelle
0

Ich sehe drei Hauptvorteile

  1. Konsistente regexEngine / Syntax verwenden: Mit :grep/vimgrepkönnen Sie eine definieren grepprg, die auf grep/ack/agusw. festgelegt werden kann . Mit dieser Option können Sie den aktuellen Puffer oder mehrere Puffer / Dateien mithilfe einer konsistenten regexEngine durchsuchen . Wenn Sie dagegen die/pattern Option von vim verwenden , bleiben Sie bei der regulären Ausdrücke-Engine von vim hängen, deren Syntax sich von der extended regular expressionSyntax unterscheidet. Jedes Mal, wenn Sie nach einem Ausdruck suchen müssen, müssen Sie darüber nachdenken, ob Sie ihn verwenden sollten \)oder nur )und andere Unterschiede. Dies kann sehr ärgerlich sein ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )

  2. vimgrep füllt eine Quickfix- / Standortliste auf : Mit :grep/vimgrepkönnen Sie eine Suchliste auffüllen . ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).

    Wenn Sie die Standortliste verwenden möchten, können Sie sie mit einer ]qVerknüpfung navigieren, wenn Sie ein ungestörtes Tim-Popes-Plugin haben ( https://github.com/tpope/vim-unimpaired ).

  3. Komplizierte Suchvorgänge in vim : Wenn Sie komplizierte Suchvorgänge ausführen müssen, müssen Sie möglicherweise die Befehlszeile verwenden. Wenn Sie das jedoch greprgrichtig definieren und einen Befehl wie [1] verwenden

    : vim / pattern1 / find . -type f

    Sie können sehr komplizierte Suchen durchführen und die Suchergebnisse in Ihrem location listoder anzeigen quickfix list.

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

alpha_989
quelle