Kiedy używać: grep i: vimgrep w vim?

17

W vimie :makeułatwia tworzenie i naprawianie błędów :greporaz :vimgrepzachowuje się jak :make. Ale dlaczego potrzebujesz tych dwóch poleceń? Dlaczego nie po prostu wyszukać wzór i po prostu nacisnąć n? Jakie są ich zalety w porównaniu z samym wyszukiwaniem?

Qian
źródło

Odpowiedzi:

17

Jak mówi doktor:

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

W skrócie, :vimgrepużywa mechanizmu grep Vima do odczytywania i znajdowania plików.:grepuż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.

nobe4
źródło
4

/?szukaj tylko bieżący bufor ale :grepi :vimgreppodjąć dowolne pliki / wzorce / globs jako argumenty.

romainl
źródło
4

Jedną z zalet :[vim]grepponad /?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 pathwię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]greppolecenie.

icc97
źródło
0

Widzę 3 podstawowe zalety

  1. Używaj spójnego regexsilnika / składni: Używanie :grep/vimgreppozwala zdefiniować grepprg, który można zdefiniować grep/ack/agitd. Używając tego możesz przeszukiwać bieżący bufor lub wiele buforów / plików, używając spójnego regexsilnika. 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 expressionskł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 )

  2. vimgrep zapełnia listę poprawek / lokalizacji : użycie :grep/vimgrepumoż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ć ]qskrótu, aby nią nawigować, jeśli masz nieuszkodzoną wtyczkę Tim-Popes ( https://github.com/tpope/vim-unimpaired )

  3. skomplikowane wyszukiwania w vimie : zazwyczaj, jeśli musisz wykonywać skomplikowane wyszukiwania, możesz użyć wiersza poleceń. Jeśli jednak greprgpoprawnie 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 listlub quickfix list.

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

alpha_989
źródło