Antworten:
Wie der Doc sagt:
Vim has two ways to find matches for a pattern: Internal and external.
Kurz gesagt, :vimgrep
verwendet Vims Grep-Mechanismus zum Lesen und Suchen in Dateien. :grep
verwendet externe Befehle, um den gleichen Job zu erreichen.
Die /
Suche bezieht sich nur auf den aktuellen Puffer, während Sie :[vim]grep
ein Dateimuster durchsuchen und so in einem gesamten Projekt gleichzeitig suchen können.
Werfen Sie einen Blick auf :h grep
für weitere Informationen.
Ein Vorteil von :[vim]grep
over /?
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 path
sodass 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]grep
Befehl zugeordnet werden.
Ich sehe drei Hauptvorteile
Konsistente regex
Engine / Syntax verwenden: Mit :grep/vimgrep
können Sie eine definieren grepprg
, die auf grep/ack/ag
usw. festgelegt werden kann . Mit dieser Option können Sie den aktuellen Puffer oder mehrere Puffer / Dateien mithilfe einer konsistenten regex
Engine 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 expression
Syntax 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 )
vimgrep füllt eine Quickfix- / Standortliste auf : Mit :grep/vimgrep
kö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 ]q
Verknüpfung navigieren, wenn Sie ein ungestörtes Tim-Popes-Plugin haben ( https://github.com/tpope/vim-unimpaired ).
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 greprg
richtig 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 list
oder anzeigen quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/