В vim :make
позволяет легко создавать и исправлять ошибки, :grep
и :vimgrep
ведет себя как :make
. Но зачем вам эти две команды? Почему бы просто не найти шаблон и просто нажать n
? Каковы их преимущества перед простым поиском?
источник
В vim :make
позволяет легко создавать и исправлять ошибки, :grep
и :vimgrep
ведет себя как :make
. Но зачем вам эти две команды? Почему бы просто не найти шаблон и просто нажать n
? Каковы их преимущества перед простым поиском?
Как говорит доктор:
Vim has two ways to find matches for a pattern: Internal and external.
В двух словах, :vimgrep
использует механизм grep Vim для чтения и поиска в файлах. :grep
использует внешние команды для достижения той же работы.
/
Поиск для текущего буфера только, в то время как :[vim]grep
поиск по шаблону файлов, что позволяет искать в весь проект сразу.
Посмотрите на :h grep
для получения дополнительной информации.
/?
искать только текущий буфер , но :grep
и :vimgrep
принимать произвольные файлы / шаблоны / шарики в качестве аргументов.
Одним из преимуществ :[vim]grep
за кадром /?
является то , что результаты получают положенные в список QuickFix (или список местоположения , если вы используете :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-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/