Kapan menggunakan: grep dan: vimgrep in vim?

16

In vim :makemembuatnya mudah untuk membangun dan memperbaiki kesalahan, dan :grepdan :vimgrepberperilaku seperti :make. Tetapi mengapa Anda membutuhkan dua perintah ini? Mengapa tidak mencari pola saja dan tekan saja n? Apa kelebihan mereka dari sekadar mencari?

Qian
sumber

Jawaban:

16

Seperti yang dikatakan dokter:

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

Singkatnya, :vimgrepmenggunakan mekanisme grep Vim untuk membaca dan menemukan dalam file. :grepmenggunakan perintah eksternal untuk mencapai pekerjaan yang sama.

The /pencarian untuk buffer saat ini saja, sedangkan :[vim]grepmencari melalui pola file, yang memungkinkan Anda untuk mencari di seluruh proyek sekaligus.

Lihat :h grepuntuk informasi lebih lanjut.

nobe4
sumber
4

/?hanya mencari buffer saat ini tetapi :grepdan :vimgrepmengambil file / pola / gumpalan sewenang-wenang sebagai argumen.

romainl
sumber
4

Salah satu manfaat :[vim]grepkelebihan /?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 pathsehingga 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]grepperintah.

icc97
sumber
0

Ada 3 keunggulan utama yang saya lihat

  1. Gunakan regexengine / sintaks yang konsisten : Menggunakan :grep/vimgrepmemungkinkan Anda untuk mendefinisikan grepprg, yang dapat didefinisikan ke grep/ack/agdll. Menggunakan ini, Anda dapat mencari buffer saat ini atau beberapa buffer / file, menggunakan regexmesin 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 expressionsintaks. 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 )

  2. vimgrep mengisi daftar perbaikan cepat / lokasi : menggunakan :grep/vimgrepmemungkinkan 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 ]qpintasan untuk menavigasinya jika Anda memiliki plugin Tim-Popes yang tidak rusak ( https://github.com/tpope/vim-unimpaired )

  3. pencarian rumit saat dalam vim : biasanya jika Anda harus melakukan pencarian rumit Anda mungkin harus menggunakan baris perintah. Namun, jika Anda mendefinisikan dengan greprgbenar dan menggunakan perintah seperti [1]

    : vim / pattern1 / find . -type f

    Anda dapat melakukan pencarian yang sangat rumit dan menampilkan hasil pencarian di location listatau quickfix list.

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

alpha_989
sumber