A-zA-Z'nin ötesindeki karakterleri içeren kelimeyi eşleştir


15

Bir kelimeyi eşleştirmek için

\v(\w+)

Vim yardımından :h \w:

\ w kelime karakteri: [0-9A-Za-z_]

Bu, tam olarak kılavuzda açıklandığı şekilde çalışır. Ancak, ötesinde karakter içeren kelimeleri eşleştirmek istiyorum a-z, örneğin prästgården . Düzenli ifade Eşleştirme \v(\w+)karşı Prastgarden yerine, üç maçlara verim:

prästgården
^^ ^^^ ^^^^

Ötesinde karakter içeren kelimeler nasıl eşleştirilir a-z? Yerel ayarım İngilizce olarak ayarlanmış ve mümkünse bu şekilde saklamak istiyorum.

Düzenleme: Sözcükler tek bir yerel ayara ait olmayabilir, ör.

prästgården
treść

POSIX karakter sınıflarının (örneğin [[:alpha:]]\+bu durumda) burada istediğinizi yapması gerekir, ancak Vim belgelerine ( :help regex) göre : "Bu öğeler yalnızca 8 bit karakterler için çalışır." Burada OS X 10.8'de Vim 7.3 ile çalışıyor, ancak Linux'ta Vim 7.3 çalışmıyor, bu yüzden bu Vim'de buna izin veren Apple'a özgü bir şey olduğunu varsayıyorum. Ayrıca, Perl çok iyi Unicode desteğine sahip olmasına rağmen, Vim Perl bağlaması yoluyla yapmanın da başarısız olduğunu göreceksiniz. Harici bir Perl betiğine geçmeniz gerekebilir, böylece tam Unicode desteğini açabilirsiniz.
Warren Young

Bu arada, Perl ile giderseniz, \p{Word}POSIX karakter sınıfı yerine kullanmak istersiniz . Perl'in POSIX karakter sınıfı işlemesinde, bunun yerine Unicode özelliklerini kullandığınızda kaçınmanız gereken birçok özel durum vardır.
Warren Young

Yanıtlar:


9

Vim (sürüm 7.3 itibariyle), ASCII olmayan karakterlerin desenlerde desteklenmesi açısından çok sınırlıdır. Özellikle, \wsadece sınırlı yararlılığı olan ASCII harfleriyle eşleşir.

Unicode'u destekleyen birkaç karakter sınıfı paterni vardır. İlginizi çeken \I, büyük harflerle ve sadece harflerle eşleşen, artı _ve @. En azından Debian sıkıştırmasında (UTF-8 yerel ayarında) hatalar var; örneğin ×ve ÷harfler olarak eşleşti, ancak tüm Latin harfleri doğru recognied gibi görünüyor hafif değişiklikler yapıldı. en azından ASCII parçası için seçenek \Iüzerinden yapılandırılabilir isident.

Ciddi Unicode desteği istiyorsanız, harici bir araca güvenmeniz gerekir. Örneğin perl -C -e '/\p{L}/'UTF-8 harflerini eşleştirmek için (UTF-8 yerel ayarı varsayarak).



2

Kiril için de çalışır

\v\k

Kiril ile biraz daha karmaşık ve başarısız

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

Doc .

Vim 7.4 üzerinde test edilmiştir.


Ben de (örn. Złoty), vb [=l=]kapsayacak listeye eklemek istiyorum ł. Ama bu zaten Ruslar için başarısız. Her neyse, paylaştığın için teşekkürler.
Marco
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.