Singkatnya, tidak. Regex Vim adalah rasa yang unik, dan tidak ada pilihan untuk membuatnya berperilaku lebih seperti rasa lainnya.
Saya pikir ini adalah hal yang baik.
Sihir
The 'magic'
pilihan tidak mengubah rasa regex yang Vim menggunakan. Ini hanya membalikkan perilaku banyak \
atom yang terhindar.
Misalnya, secara default, +
adalah +
karakter literal , di mana \+
berarti "satu atau lebih dari atom sebelumnya". Sebaliknya, *
berarti "nol atau lebih dari atom sebelumnya", sedangkan \*
literal *
. Banyak orang menganggap ini cukup membingungkan. Menggunakan \v
dalam pola Anda membuatnya sedikit lebih konsisten. :help 'magic'
memberikan ringkasan yang baik:
after: \v \m \M \V matches ~
'magic' 'nomagic'
$ $ $ \$ matches end-of-line
. . \. \. matches any character
* * \* \* any number of the previous atom
() \(\) \(\) \(\) grouping into an atom
| \| \| \| separating alternatives
\a \a \a \a alphabetic character
\\ \\ \\ \\ literal backslash
\. \. . . literal dot
\{ { { { literal '{'
a a a a literal 'a'
Secara pribadi, saya pikir perilaku default baik untuk file kode, di mana itu tidak biasa untuk mencari hal-hal seperti foo(
, menggunakan literal (
.
Rasa regex Vim sendiri
Saya telah menyaksikan banyak orang berharap Vim mendukung PCRE. Secara pribadi, saya berharap alat-alat lain mendukung rasa regex Vim. Ini memiliki beberapa kemampuan yang tidak mungkin atau terlalu rumit untuk dicapai di PCRE.
Tidak mungkin di PCRE
Lookaround adalah fitur umum di mana Anda dapat menyatakan bahwa suatu pola cocok atau tidak cocok sebelum atau setelah pola yang Anda coba cocokkan. Misalnya, pola PCRE q(?!u)
(atau pola regim Vim qu\@!
) cocok dengan q
yang tidak diikuti oleh a u
. (Ini lebih benar daripada q[^u]
, yang mengharuskan ada beberapa karakter setelah q
.)
Tampilan negatif panjang variabel
PCRE, dan banyak rasa lainnya, memiliki batasan bahwa pola tampilan negatif di belakang harus memiliki panjang yang tetap. Itu berarti bahwa pola seperti (?<![a-z]{3})foo
, yang berarti "string yang foo
tidak diawali dengan tepat 3 huruf kecil") baik-baik saja, tetapi (?<![a-z]+)foo
(yang berarti "string foo
tidak didahului dengan sejumlah huruf kecil") tidak.
Pembatasan ini tidak ada di Vim. Dalam Vim, pola seperti \([a-z]\+\)\@<!foo
, walaupun mungkin sedikit jelek untuk dilihat, sangat valid.
Lebih mudah di Vim regex
Beberapa hal jauh lebih baik dalam rasa regim Vim.
Mulai dan akhiri pertandingan jangkar
Yang paling penting, menurut saya, adalah \zs
dan \ze
jangkar. Ini memungkinkan Anda menentukan awal dan akhir pertandingan. Misalnya, foo(\zs.*\ze)
hanya cocok dengan apa yang ada di antara (
dan )
dalam panggilan fungsi foo(...)
. Ini bisa dilakukan di PCRE, tetapi membutuhkan penggunaan lookaround, yang sedikit membosankan:(?<=foo\().*(?=\))
Pencocokan awalan
Hal keren lainnya yang dapat dilakukan Vim adalah mencocokkan awalan apa pun (termasuk awalan kosong) dari urutan karakter tertentu. Misalnya, untuk mencocokkan pada f
, fo
, foo
, atau food
, pola f\%[ood]
dapat digunakan. Dalam PCRE, pola seperti itu akan terlihat f(o(od?)?)?
. (Bayangkan itu untuk string yang lebih panjang!)
Posisi kursor, baris, dan kolom yang cocok
Regex Vim memiliki beberapa jangkar untuk mencocokkan posisi dalam buffer.
\%23c
kolom pertandingan 23
\%<23c
cocok sebelum kolom 23
\%>23c
cocok setelah kolom 23
\%16l
cocok dengan baris 16
- Mirip dengan kolom, ada jangkar untuk sebelum atau sesudah nomor baris
\%#
cocok dengan posisi kursor
Saya pikir itu layak - sementara untuk merangkul rasa Vim tentang regex. Ini sangat cocok untuk digunakan dalam editor teks yang digunakan terutama untuk pemrograman, dan cukup kuat.
\v
termasuk<>
batas kata, yang AFAIK unik untuk Vim. Jadi tidak, cukup gambarkan mereka sebagai "Vim regex." (Tidak memposting sebagai jawaban karena saya tidak positif)