Vim'de benzer iki karakterden birini nasıl arayabilirim?


29

Vim'de "planA" veya "planB" ile eşleşen bir arama yapmak istersem, şunu yapabileceğimi biliyorum:

/plan[AB]

Bu çalışır çünkü regex, A veya B'ye karakter kümesi olarak izin verir.

Ancak iki tam diziden birini nasıl belirleyebilirim? Örneğin, "planetAwesome" veya "planetTerrible"?

Bu, her ikisi ile de eşleşecektir "planetAnythingHereAsLongAsItsJustLetters":

planet\([a-zA-Z]*\)

Yalnızca "planetAwesome" veya "planetTerrible" ile tam olarak eşleşen dizeleri nasıl eşleştirebilirim ?


Aslında, parantez bir karakter sınıfı oluşturur. plan[ABC]maçları planA, planBve planCeşit derecede iyi.
Christopher Bottoms

@molsecules - doğru, teşekkürler. Soruyu güncelledim.
Nathan Long

Yanıtlar:


43
/planet\(Awesome\|Terrible\)

İlgili dokümantasyonu görmek için :help /“Baskı düzeninin” bölümüne gidin ve aşağı kaydırın.


1
Ah! Bunu denediğimde parantezlerden kaçmıyordum. İlginç - Sadece gerçek karakterlerden kaçmam gerektiğini düşündüm.
Nathan Long

1
@Nathan: Çeşitli regex motorları, karakterleri özel kılmak için hangi karakterlerin kaçması gerektiğine dair farklı kurallara sahiptir, yani onları hazır hale getirmek için kaçılmalıdır (örn. POSIX BRE - ERE). Sen özel kaçar birini ekleyerek başına deseni bazında Vim kaçan gereksinimleri çimdik: \m, \M, \v, veya\V . 'magic'Seçenek de vardır , ancak küresel etkiye sahip olduğundan yukarıdakileri yalnız bırakmamak en iyisidir (yukarıdaki bayraklardan biri tarafından geçersiz kılınmazsa).
Chris Johnsen

1
Çok sihir kullanmak şu şekilde görünüyor:/\vplanet(Awesome|Terrible)
SergioAraujo 30:17

4

Gilles'un cevabına eklemek için içine birkaç şey eklemek isteyebilirsiniz:

/\<planet\(Awesome\|Terrible\)\>

\<bir 'kelimenin' başlangıcını (esasen alfanümerikler) bir 'kelimenin' başlangıcını
\>işaretler (esasen alfanümerikler)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.