Özetle, hayır. Vim'in normal ifadesi benzersiz bir lezzettir ve başka bir lezzet gibi davranmasını sağlamak için hiçbir seçenek yoktur.
Bunun iyi bir şey olduğunu düşünüyorum.
sihirli
Bu 'magic'
seçenek, Vim'in kullandığı normal ifadenin tadını değiştirmez. Sadece birçok \
kaçan atomun davranışını tersine çevirir .
Örneğin, varsayılan olarak, "önceki atomun biri veya daha fazlası" anlamına gelen +
değişmez bir +
karakterdir \+
. Buna karşılık, *
"önceki atomun sıfır veya daha fazlası" anlamına gelirken \*
, bir değişmezdir *
. Birçok insan bunu oldukça kafa karıştırıcı buluyor. \v
Deseninizde kullanmak onu biraz daha tutarlı hale getirir. :help 'magic'
iyi bir özet sunar:
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'
Şahsen, varsayılan davranış foo(
tam anlamını kullanarak gibi şeyler aramak için nadir değildir kod dosyaları için güzel olduğunu düşünüyorum (
.
Vim'in kendi regex lezzeti
Vim'in PCRE destekli olmasını isteyen birçok kişiye tanık oldum. Şahsen, Vim'in regex lezzetini destekleyen diğer araçların olmasını dilerim. PCRE'de başarılması imkansız veya çok hantal olan bazı yeteneklere sahiptir.
PCRE'de imkansız
Lookaround , bir desenin eşleştirmeye çalıştığınız desenden önce veya sonra eşleştiğini veya eşleşmediğini iddia edebileceğiniz yaygın bir özelliktir. Örneğin, PCRE kalıbı q(?!u)
(veya Vim normal ifade kalıbı qu\@!
) q
, a ile takip edilmeyen bir kalıpla eşleşir u
. (Bu daha doğru q[^u]
, olduğu gerektiren bir karakter sonra q
).
Değişken uzunlukta negatif görünüm
PCRE ve diğer birçok aroma, negatif gözetleme deseninin sabit uzunlukta olması gerektiği konusunda bir kısıtlamaya sahiptir. Bunun anlamı gibi bir desen olduğunu (?<![a-z]{3})foo
"dizesini anlamına foo
değil öncesinde tam olarak 3 küçük harfler") ince, ama (?<![a-z]+)foo
( "dizesi anlam foo
önünde değil herhangi bir sayı küçük harflerin") değildir.
Bu kısıtlama Vim'de mevcut değildir. Vim'de, \([a-z]\+\)\@<!foo
bakmak biraz çirkin olsa da , bir desen mükemmel bir şekilde geçerlidir.
Vim normal ifadesinde daha kolay
Vim'in regex lezzetinde bazı şeyler çok daha hoş.
Maç bağlantılarının başlangıcı ve sonu
En dikkate değer, bence, \zs
ve \ze
çapalar. Bunlar maçın başlangıcını ve bitişini belirlemenizi sağlar. Örneğin, foo(\zs.*\ze)
yalnızca bir işlev çağrısında (
ve )
arasındaki bir işlev çağrısıyla eşleşir foo(...)
. Bu PCRE'de yapılabilir, ancak biraz sıkıcı olan görünümün kullanımını gerektirir:(?<=foo\().*(?=\))
Önek eşleme
Vim'in yapabileceği bir başka harika şey, belirli bir karakter dizisinin herhangi bir önekiyle (boş önek dahil) eşleşmektir. Örneğin, ilgili eşleştirmek için f
, fo
, foo
ya da food
model, f\%[ood]
kullanılabilir. PCRE'de böyle bir model gibi görünecektir f(o(od?)?)?
. (Bunu daha uzun bir ip için düşünün!)
Eşleşen imleç, çizgi ve sütun konumları
Vim'in normal ifadesinin, arabellekteki konumları eşleştirmek için bazı bağlantıları vardır.
\%23c
sütun 23 ile eşleşir
\%<23c
sütun 23'ten önceki eşleşmeler
\%>23c
23 sütunundan sonraki maçlar
\%16l
16 numaralı satırla eşleşir
- Sütuna benzer şekilde, bir satır numarasından önce veya sonra tutturucular da vardır
\%#
imleç konumuyla eşleşir
Bence Vim'in normal ifade lezzetini benimsemeye değer. Öncelikle programlama için kullanılan bir metin düzenleyicide kullanım için uygundur ve oldukça güçlüdür.
\v
içerdiğinden emin olabilirsiniz<>
. Yani hayır, sadece "Vim normal ifadesi" olarak tanımlayın. (Olumlu olmadığım için cevap olarak yayınlamıyorum)