Слово, що містить символи, що перевищують a-zA-Z


15

Щоб відповідати слову, можна використовувати

\v(\w+)

З довідки vim :h \w:

\ w символ слова: [0-9A-Za-z_]

Це працює саме так, як описано в посібнику. Однак я хочу відповідати словам, що містять символи a-z, що знаходяться за межами , наприклад, prästgården . Зіставлення регулярного виразу \v(\w+)проти prästgården поступається на три матчі:

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

Як зіставити слова, що містять символи за межами a-z? Моя мова визначена англійською мовою, і, якщо можливо, я хотів би зберегти її таким чином.

Редагувати: слова можуть не належати до однієї мови, наприклад

prästgården
treść

Класи символів POSIX (наприклад, [[:alpha:]]\+у цьому випадку) повинні робити все, що ви хочете тут, але згідно з документами Vim ( :help regex), це не так: "Ці елементи працюють лише для 8-бітових символів." Тут трапляється працювати з Vim 7.3 на OS X 10.8, але Vim 7.3 в Linux не працює, тому я припускаю, що в цьому Vim є щось специфічне для Apple, що це дозволяє. Ви також виявите, що зробити це через прив'язку Vim Perl також не вдається, навіть якщо Perl має дуже хорошу підтримку Unicode. Вам може знадобитися перейти на зовнішній скрипт Perl, щоб ви могли увімкнути повну підтримку Unicode.
Warren Young

До речі, якщо ви перейдете з Perl, ви хочете використовувати \p{Word}замість класу символів POSIX. У обробці класів символів POSIX Perl дуже багато випадків винятків, яких ви уникаєте, якщо замість цього використовуєте властивості Unicode.
Воррен Янг

Відповіді:


9

Vim (станом на версію 7.3) дуже обмежений щодо підтримки символів, що не належать до ASCII, у шаблонах. Зокрема, відповідає \wлише літерам ASCII, що є обмеженою корисністю.

Існує кілька моделей класів символів, які підтримують Unicode. Вас цікавлять \I, які за великим рахунком відповідають буквам і лише літерам, плюс _і @. Принаймні, при видавленні Debian (у локальній мережі UTF-8) є помилки; наприклад , ×і ÷підбираються як букви, але все латинські букви наголоси , здається, recognied правильно. \Iможе бути налаштований через isidentопцію, принаймні, для частини ASCII.

Якщо ви хочете серйозної підтримки Unicode, вам потрібно буде покластися на зовнішній інструмент. Наприклад, perl -C -e '/\p{L}/'щоб відповідати буквам UTF-8 (припускаючи локаль UTF-8).



2

Це працює також для кирилиці

\v\k

Трохи складніше і провалюється кирилиця

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

Док .

Випробувано на Vim 7.4.


Я б додав [=l=]до списку, який би охоплював ł(наприклад, złoty) тощо. Але для російської це вже не вдається. У будь-якому випадку, дякую за обмін.
Марко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.