4

.vimrcで以下を定義するか、vimコマンドライン内で実行します。

syn match ndbMethods "[^. \t\n\r]\@<=[_a-z][_a-zA-Z0-9]*(\@="
hi ndbMethods guibg=#222222

アクティブバッファでCスタイルのメソッド呼び出しを使用して結果を表示します。

foo();

メソッド名の最初の文字が一致していないことがわかります。

ルックビハインドパターンは、一致するメソッドの最初の文字の前に、行の先頭、リテラル.、または空白を強制することを目的としています。

奇妙なことに、これをネガティブな先読み(\@<!)にすることはうまくいくようです!

誰かがこの後ろ姿が間違っている理由を説明するのに十分親切でしょうか?

4

1 に答える 1

10

更新:f、後ろを振り返って、あなたはおそらく[. \t\n\r]、ではなく、をチェックしたいと思うでしょう[^. \t\n\r]。現在、あなたは「これらのキャラクターの1つに従わない何か」と言っているので、実際にそれらのキャラクターの1つではないので、に達したときにのみoその条件が満たされます。fしたがって、キャラクタークラスのネゲートを解除するか、発見したように、後読みをネゲートする必要があります。

あなたもあなたの言葉を混乱させていると思います。

\@<=    positive lookbehind
\@<!    negative lookbehind
\@=     positive lookahead
\@!     negative lookahead
于 2012-08-27T17:27:02.080 に答える