a-zA-Zを超える文字を含む単語に一致


15

単語を一致させるために使用できます

\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ść

POSIX文字クラス([[:alpha:]]\+この場合など)はここで望むことをするはずですが、Vimのドキュメント(:help regex)によれば、「これらの項目は8ビット文字に対してのみ機能します」ここではOS X 10.8のVim 7.3で動作しますが、LinuxのVim 7.3は動作しません。そのため、このVimにはApple固有の何かがあると思います。また、Vim Perlバインディングを介してそれを行うことも、Perlが非常に優れたUnicodeサポートを備えているにもかかわらず失敗することがわかります。外部のPerlスクリプトに切り替える必要がある場合があるため、完全なUnicodeサポートを有効にすることができます。
ウォーレンヤング

ところで、Perlを使用する場合\p{Word}は、POSIX文字クラスの代わりに使用する必要があります。PerlのPOSIX文字クラスの処理には多くの例外があり、代わりにUnicodeプロパティを使用する場合は避けてください。
ウォーレンヤング

回答:


9

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

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

本格的な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=]])

Doc

Vim 7.4でテスト済み。


(złotyなど)[=l=]をカバーするリストにも追加しłます。しかし、これはすでにロシア語で失敗しています。とにかく、共有してくれてありがとう。
マルコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.