"Zoom" çapaları
@ Jecxjo'nun cevabına ek olarak, sıfır genişlikte çapaları \zs
ve \ze
pozitif görünüm yerine kullanabileceğiniz birçok durum vardır . Bu çapalar , tam kalıbın içindeki eşleşmenin başlangıcını ( \zs
) ve sonunu ( \ze
) tanımlar .
Örnekler
foo\zsbar
maç olacak bar
öncesinde foo
( foo
maçın parçası değil)
foo\zebar
maç olacak foo
izledi bar
( bar
maçın değil parçası)
myFunction(\zs.*\ze)
işlev çağrısındaki parametrelerle eşleşir (gösterim amacıyla, açgözlü vs açgözlü olmayan eşleşmeye odaklanmıyorum)
Kullanmak için koyarak
Bunlar :substitute
komutu kullanırken en kullanışlı hale gelir . Örneğin, ben bir işlev çağrısında parametreleri değiştirmek istediğini söylüyor myFunction()
ile foo
:
:%s/myFunction(\zs.*\ze)/foo/
Bu bırakacaktır myFunction(
ve )
bozulmamış ve siz onları yakalamak konusunda endişe gerekmez desen veya bunları tekrar yerine .
Bunu Vim'in regex'in arama özelliğini kullanarak yapabilirsiniz, ancak oldukça tıknazdır:
:%s/\(myFunction(\)\@<=.*\()\)\@=/foo/
(Bu sözdiziminin ilk başta ne yapmaya çalıştığımı unutmama neden olduğunu biliyorum.)
Hala bazen etrafa bakmak gerek
Etrafınıza bakmanız gereken durumlar var. Kullanılması \zs
ve \ze
sahip olduğunuz basit durumlar için mükemmeldir önce bir şeyi takip metne uyuşturmak için takip sonrasında bir şey . Fakat bundan daha karmaşıksa, muhtemelen daha geniş görünen sözdizimine bağlı kalmak zorunda kalacaksınız.
Eğlenceli gerçek
Çok çirkin olsalar da, Vim'in görünüşü PCRE'dekilerden daha güçlü! Onlar uzunluğu önceden belirlenmiş olmadığı çeşitli desen olduğunu iddia edebilir, yani değişken uzunluktaki Negatif Geriye İlerleme destekleyen değil sizin maç öncesi.
PCRE bunu desteklemiyor, çünkü oldukça pahalı bir işlem. Bu, Vim'de çok büyük bir endişe değildir, çünkü en sık kullanılan regex vakaları, hesaplama zamanının kullanıcıya neredeyse algılanamadığı yerlerde etkileşimli arama yapma eğilimindedir. Yine de, sözdizimi vurgulaması için kullanılmışsa, muhtemelen farkedeceksiniz.
İlgili Yardım Konuları
:help \zs
:help \ze
:help perl-patterns