Jawaban:
Seperti yang dikatakan dokter:
Vim has two ways to find matches for a pattern: Internal and external.
Singkatnya, :vimgrep
menggunakan mekanisme grep Vim untuk membaca dan menemukan dalam file. :grep
menggunakan perintah eksternal untuk mencapai pekerjaan yang sama.
The /
pencarian untuk buffer saat ini saja, sedangkan :[vim]grep
mencari melalui pola file, yang memungkinkan Anda untuk mencari di seluruh proyek sekaligus.
Lihat :h grep
untuk informasi lebih lanjut.
Salah satu manfaat :[vim]grep
kelebihan /?
adalah bahwa hasilnya dimasukkan ke dalam daftar perbaikan cepat (atau daftar lokasi jika Anda gunakan :l[vim]grep
), ini berarti Anda dapat menarik daftar semua pertandingan yang menggunakan :cl
. Anda kemudian dapat menggunakan nomor untuk langsung ke hasil yang Anda inginkan dari daftar.
Ini juga berarti bahwa Anda dapat menggunakan perintah yang sama untuk mencari buffer :[vim]grep pattern %
saat ini untuk mencari seluruh basis kode Anda :[vim]grep pattern path
sehingga ada beberapa simetri yang bagus untuk itu.
Selanjutnya, Anda dapat bercabang dan menggunakan Silver Surfer / Ripgrep untuk memberi Anda pencarian yang sangat kuat. Ini dapat dipetakan sesuai :[vim]grep
perintah.
Ada 3 keunggulan utama yang saya lihat
Gunakan regex
engine / sintaks yang konsisten : Menggunakan :grep/vimgrep
memungkinkan Anda untuk mendefinisikan grepprg
, yang dapat didefinisikan ke grep/ack/ag
dll. Menggunakan ini, Anda dapat mencari buffer saat ini atau beberapa buffer / file, menggunakan regex
mesin yang konsisten . Di sisi lain, jika Anda menggunakan opsi vim/pattern
, Anda terjebak pada mesin regex default vim, yang memiliki sintaks yang berbeda dibandingkan dengan extended regular expression
sintaks. Jadi, kapan pun Anda harus mencari ekspresi, Anda harus berpikir / mengingat apakah Anda harus menggunakan \)
atau adil )
dan perbedaan lainnya. Ini bisa sangat menjengkelkan ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )
vimgrep mengisi daftar perbaikan cepat / lokasi : menggunakan :grep/vimgrep
memungkinkan Anda untuk mengisi daftar pencarian. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Jika Anda ingin menggunakan daftar lokasi, Anda dapat menggunakan ]q
pintasan untuk menavigasinya jika Anda memiliki plugin Tim-Popes yang tidak rusak ( https://github.com/tpope/vim-unimpaired )
pencarian rumit saat dalam vim : biasanya jika Anda harus melakukan pencarian rumit Anda mungkin harus menggunakan baris perintah. Namun, jika Anda mendefinisikan dengan greprg
benar dan menggunakan perintah seperti [1]
: vim / pattern1 / find . -type f
Anda dapat melakukan pencarian yang sangat rumit dan menampilkan hasil pencarian di location list
atau quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/