Відповіді:
Як кажуть доктори:
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/