Когда использовать: grep и: vimgrep в vim?

17

В vim :makeпозволяет легко создавать и исправлять ошибки, :grepи :vimgrepведет себя как :make. Но зачем вам эти две команды? Почему бы просто не найти шаблон и просто нажать n? Каковы их преимущества перед простым поиском?

Цянь
источник

Ответы:

17

Как говорит доктор:

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

В двух словах, :vimgrepиспользует механизм grep Vim для чтения и поиска в файлах. :grepиспользует внешние команды для достижения той же работы.

/Поиск для текущего буфера только, в то время как :[vim]grepпоиск по шаблону файлов, что позволяет искать в весь проект сразу.

Посмотрите на :h grepдля получения дополнительной информации.

nobe4
источник
4

/?искать только текущий буфер , но :grepи :vimgrepпринимать произвольные файлы / шаблоны / шарики в качестве аргументов.

romainl
источник
4

Одним из преимуществ :[vim]grepза кадром /?является то , что результаты получают положенные в список QuickFix (или список местоположения , если вы используете :l[vim]grep), это означает , что вы можете подтянуть список всех совпадений с использованием :cl. Затем вы можете использовать номер, чтобы перейти непосредственно к нужному результату из списка.

Это также означает, что вы можете использовать ту же команду для поиска в текущем буфере, :[vim]grep pattern %что и для поиска по всей базе кода, :[vim]grep pattern pathтак что есть некоторая приятная симметрия.

В дополнение к этому вы можете затем развернуться и использовать Silver Surfer / Ripgrep, чтобы дать вам очень мощный поиск. Они могут быть сопоставлены с :[vim]grepкомандой.

icc97
источник
0

Я вижу 3 основных преимущества

  1. Используйте согласованный regexмеханизм / синтаксис: Использование :grep/vimgrepпозволяет вам определить a grepprg, который может быть определен и grep/ack/agт. Д. Используя это, вы можете искать текущий буфер или несколько буферов / файлов, используя согласованный regexмеханизм. С другой стороны, если вы используете опцию vim/pattern , вы застреваете в движке регулярных выражений vim по умолчанию, синтаксис которого отличается от extended regular expressionсинтаксиса. Таким образом, каждый раз, когда вам нужно искать выражение, вам придется думать / помнить, следует ли вам использовать \)или просто )и другие различия. Это может быть очень раздражающим ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )

  2. vimgrep заполняет список быстрых исправлений / местоположений : использование :grep/vimgrepпозволяет вам заполнить список поиска. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).

    Если вы действительно хотите использовать список местоположений, вы можете использовать ]qярлык для навигации по нему, если у вас есть необработанный плагин Tim-Popes ( https://github.com/tpope/vim-unimpaired )

  3. сложные поиски в vim : обычно, если вам приходится выполнять сложные поиски, вам, возможно, придется использовать командную строку. Однако, если вы greprgправильно определите и используете такую ​​команду, как [1]

    : vim / pattern1 / find . -type f

    Вы можете выполнять очень сложные поиски и отображать результаты поиска в вашем location listили quickfix list.

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

alpha_989
источник