vimで単語をチャンクに分割しないようにするにはどうすればよいですか?


8

英語のユーザーはおそらくこの問題を抱えていませんが、正規表現に関してはvimはかなり馬鹿げています。私の場合、ENアルファベット以外のトルコ語のアルファベットのほとんどの文字は、単語文字としては適格ではないようです。

トルコ語の単語を含むドキュメントがあるとします。

gerçekleşiyor

検索式

/ger\wek

…単語の始まりとは一致しません。何らかの理由で、çは単語文字ではありません。

プラグイン\wが正規表現のレパートリーの一部として使用する場合、これは厄介なことになります。適例はneocompcacheneocompleteNeovimと互換性があるために代わりに使用する)です。一部の言語構文で余分なマッチングルールセットを除外すると、オートコンプリートはワードサイズのチャンクでのみ発生します。私が大量のトルコ語の散文を書いているとき、実際には機能的なオートコンプリートを持っていると便利ですが、ほとんどの単語はトルコ語の文字が省略された状態で小さなチャンクに分割されるため、役に立たないほどです。

より広い範囲の文字を「単語」文字として受け入れるようにvim(できればneovimが望ましい)をどのように説得できますか?


どのエンコーディングとファイルエンコーディングを使用していますか?
cxw

全体で@cxw utf-8。そして、はい、両方の設定で設定されています。
カレブ2015年

1
この質問はneovimとしてタグ付けされました。問題がまだない場合は、NeoVim課題追跡で課題を開くことをお勧めします。これはおそらく短期的には修正されないでしょうが、間もなく終了します... vim_devにこれについてのメッセージを投稿することもできますが、何かを行う必要があることに誰もが同意するのではないかと思います。変更。
Martin Tournoij、2015年

回答:


5

\wはの明示的な省略形です[0-9A-Za-z_]\kその範囲外のUnicode文字に一致させる場合は、代わりに使用してください。たとえば、と/ger\kek一致しgerçekleşiyorます。

ちなみに、neocompleteはこれを認識していますが\k、パフォーマンスの問題のため、(デフォルトでは)意図的に使用していません。neocompleteのg:neocomplete#keyword_patterns設定を変更できます。以下も参照してください。

https://github.com/Shougo/neocomplete.vim/issues/207


4

を再定義する簡単な方法がないよう\wです。参照は、例えば、Vimの正規表現は、Unicode文字が非ワードとしてある一致し-ZA-Zを超える文字を含むマッチワード

ただし、定期的に再入力してもかまわない場合は、カスタム範囲を使用できる場合があります(ha) [a-zA-Z\%u00c7-\%u015f]。残念ながらトルコ語以外の多くの文字にも一致しますが、それらの文字がテキストに表示されない場合は、問題ない可能性があります。


1
残念ながら、私はそのような正規表現が使用されるすべての場所を制御しているわけではありません。任意の数のプラグインが使用\wするため、これに関してはすべてのプラグインが失敗します。パッチを1つ1つ作成するのではなく(原因を追跡できる場合)、vimにパッチを適用して機能するようにした方が簡単です\w。ええと。
カレブ2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.