web-dev-qa-db-ja.com

a-zA-Z以外の文字を含む単語に一致

単語と一致させるには

_\v(\w+)
_

Vimヘルプから_:h \w_:

\ w単語文字:[0-9A-Za-z_]

これは、マニュアルに記載されているとおりに機能します。ただし、_a-z_以外の文字を含む単語と一致させたいのですが、 prästgården。正規表現\v(\w+)prästgårdenと照合すると、代わりに3つの一致が得られます。

_prästgården
^^ ^^^ ^^^^
_

_a-z_以外の文字を含む単語を一致させる方法は?私のロケールは英語に設定されており、可能であればそれをそのままにしたいと思います。

編集:単語が単一のロケールに属していない可能性があります。

_prästgården
treść
_
16
Marco

Vim(バージョン7.3以降)は、パターンでの非ASCII文字のサポートに関して非常に制限されています。特に、 \wはASCII文字にのみ一致しますが、これは有用性が限られています。

Unicodeをサポートする文字クラスパターンがいくつかあります。あなたにとって興味深いのは \I 、これは概して文字と文字のみに一致し、さらに_および@。少なくともDebian squeeze(UTF-8ロケール)では、エラーがあります。例えば ​​×および÷は文字として一致しますが、すべてのラテン語のアクセント付き文字は正しく認識されているようです。 \Iは、少なくともASCIIの部分については isident オプションを使用して構成できます。

本格的なUnicodeサポートが必要な場合は、外部ツールに依存する必要があります。例えば ​​Perl -C -e '/\p{L}/'はUTF-8文字に一致します(UTF-8ロケールを想定)。

使用する \kiskeyword オプションを参照してください。

3
Hans Ginzel

キリル文字でも機能します

\v\k

もう少し複雑でキリル文字で失敗する

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

Doc

Vim 7.4でテスト済み。

2
pevik