Odpowiedzi:
Jak mówi doktor:
Vim has two ways to find matches for a pattern: Internal and external.
W skrócie, :vimgrep
używa mechanizmu grep Vima do odczytywania i znajdowania plików.:grep
używa zewnętrznych poleceń, aby osiągnąć to samo zadanie.
/
Wyszukiwania jest tylko dla bieżącego bufora, natomiast:[vim]grep
przeglądać struktury plików, pozwalając, aby szukać w całym projekcie naraz.
Przyjrzeć się :h grep
, aby uzyskać więcej informacji.
Jedną z zalet :[vim]grep
ponad /?
jest to, że wyniki są umieszczane na liście szybkich poprawek (lub liście lokalizacji, jeśli używasz :l[vim]grep
), co oznacza, że możesz wyciągnąć listę wszystkich dopasowań za pomocą:cl
. Następnie możesz użyć numeru, aby przejść bezpośrednio do pożądanego wyniku z listy.
Oznacza to również, że możesz użyć tego samego polecenia do przeszukiwania bieżącego bufora, :[vim]grep pattern %
jak do przeszukiwania całej bazy kodu, :[vim]grep pattern path
więc jest w tym trochę symetrii.
Następnie możesz rozgałęzić się i użyć Silver Surfer / Ripgrep, aby zapewnić bardzo mocne wyszukiwanie. Można je odwzorować na :[vim]grep
polecenie.
Widzę 3 podstawowe zalety
Używaj spójnego regex
silnika / składni: Używanie :grep/vimgrep
pozwala zdefiniować grepprg
, który można zdefiniować grep/ack/ag
itd. Używając tego możesz przeszukiwać bieżący bufor lub wiele buforów / plików, używając spójnego regex
silnika. Z drugiej strony, jeśli użyjesz opcji vima/pattern
, utkniesz w domyślnym silniku wyrażeń regularnych vima, który ma inną składnię niż extended regular expression
składnia. Tak więc, za każdym razem, gdy będziesz musiał szukać wyrażenia, będziesz musiał pomyśleć / pamiętać, czy powinieneś użyć, \)
czy tylko )
i inne różnice. Może to być bardzo denerwujące ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )
vimgrep zapełnia listę poprawek / lokalizacji : użycie :grep/vimgrep
umożliwia wypełnienie listy wyszukiwania. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Jeśli chcesz skorzystać z listy lokalizacji, możesz użyć ]q
skrótu, aby nią nawigować, jeśli masz nieuszkodzoną wtyczkę Tim-Popes ( https://github.com/tpope/vim-unimpaired )
skomplikowane wyszukiwania w vimie : zazwyczaj, jeśli musisz wykonywać skomplikowane wyszukiwania, możesz użyć wiersza poleceń. Jeśli jednak greprg
poprawnie zdefiniujesz i użyjesz polecenia, takiego jak [1]
: vim / pattern1 / find . -type f
Możesz wykonywać bardzo skomplikowane wyszukiwania i wyświetlać wyniki wyszukiwania w swoim location list
lub quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/