Відповіді:
Як кажуть доктори:
Vim has two ways to find matches for a pattern: Internal and external.
Коротше кажучи, :vimgrepвикористовує механізм grep Vim для читання та пошуку у файлах. :grepвикористовує зовнішні команди для досягнення тієї ж роботи.
/Пошук для поточного буфера тільки, в той час як :[vim]grepпошук за шаблоном файлів, що дозволяє шукати в весь проект відразу.
Перегляньте :h grepдля отримання додаткової інформації.
Одна з переваг :[vim]grepнад /?тим, що результати потрапляють до списку швидких виправлень (або списку місцеположень, якщо ви використовуєте :l[vim]grep), це означає, що ви можете скласти список усіх збігів, які використовують :cl. Потім ви можете використовувати число, щоб перейти безпосередньо до потрібного результату зі списку.
Це також означає, що ви можете використовувати ту саму команду для пошуку в поточному буфері, :[vim]grep pattern %як і для пошуку всієї бази коду, :[vim]grep pattern pathтак що в ній є приємна симетрія.
Додатково до цього ви можете розгалужуватися та використовувати Silver Surfer / Ripgrep, щоб отримати дуже потужний пошук. Вони можуть бути відображені в :[vim]grepкоманді.
Я бачу 3 основні переваги
Використовуйте послідовний regexдвигун / синтаксис: Використання :grep/vimgrepдозволяє визначити a grepprg, яке можна визначити і grep/ack/agт. Д. За допомогою цього ви можете шукати поточний буфер або кілька буферів / файлів, використовуючи послідовний regexмеханізм. З іншого боку, якщо ви використовуєте опцію vim/pattern , ви застрягли в двигуні регулярних виразів vim за замовчуванням, який має інший синтаксис порівняно з extended regular expressionсинтаксисом. Отже, щоразу, коли вам доведеться шукати вираз, вам доведеться подумати / запам'ятати, чи слід вживати \)чи просто )та інші відмінності. Це може дуже дратувати ( /programming/3864467/whats-the-difference-bet between-vim-regex-and-normal- regex )
vimgrep заповнює список виправлень / місцеположення : використання :grep/vimgrepдозволяє заповнити список пошуку. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Якщо ви хочете скористатися списком місцеположень, ви можете скористатися ]qярликом для навігації по ньому, якщо у вас є непідключений плагін Tim-Popes ( https://github.com/tpope/vim-unimpaired )
складні пошуки під час vim : зазвичай, якщо вам доведеться робити складні пошуки, можливо, доведеться використовувати командний рядок. Однак якщо ви greprgправильно визначитесь і використовуєте таку команду, як [1]
: vim / pattern1 / find . -type f
Ви можете робити дуже складні пошуки та відображати результати пошуку у вашому location listабо quickfix list.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/