Чтобы соответствовать слову можно использовать
\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ść
vim
regular-expression
Marco
источник
источник
[[:alpha:]]\+
в данном случае) должны делать то, что вы хотите, но в соответствии с Vim docs (:help regex
) этого не происходит: «Эти элементы работают только для 8-битных символов». Это действительно работает здесь с Vim 7.3 на OS X 10.8, но Vim 7.3 на Linux не работает, поэтому я предполагаю, что в этом Vim есть что-то специфическое для Apple, что позволяет. Вы также обнаружите, что выполнить это через привязку Vim Perl также не удается, хотя Perl имеет очень хорошую поддержку Unicode. Возможно, вам потребуется переключиться на внешний сценарий Perl, чтобы включить полную поддержку Unicode.\p{Word}
вместо класса символов POSIX. Существует много исключений в обработке Perl-символов POSIX, которых вы избегаете, когда вместо этого используете свойства Unicode.Ответы:
Vim (начиная с версии 7.3) очень ограничен в отношении поддержки не-ASCII символов в шаблонах. В частности,
\w
сопоставляются только буквы ASCII, что имеет ограниченную полезность.Существует несколько шаблонов классов символов, которые поддерживают Unicode. Интересны для вас
\I
, которые по большому счету совпадают буквы и только буквы, плюс_
и@
. По крайней мере в Debian squeeze (в локали UTF-8) есть ошибки; например,×
и÷
сопоставляются как буквы, но все буквы с латинским акцентом, кажется, распознаются правильно.\I
можно настроить с помощьюisident
опции, по крайней мере, для части ASCII.Если вы хотите серьезную поддержку Unicode, вам нужно полагаться на внешний инструмент. Например,
perl -C -e '/\p{L}/'
для сопоставления букв UTF-8 (при условии локали UTF-8).источник
Использование
\k
. Смотритеiskeyword
вариант.источник
Это работает также для кириллицы
Немного сложнее и терпит неудачу с кириллицей
Док .
Проверено на Vim 7.4.
источник
[=l=]
к списку, который будет охватыватьł
(например, złoty) и т. Д. Но это уже не для русского. В любом случае, спасибо, что поделились.