c.vim プラグインを使用して、Vim のメンバー変数を強調表示しようとしています。
たとえば、
struct sockaddr_in sa;
sa.sin_family = AF_INET;
強調したいsin_family
。
だから、ここに私の構文マッチコードがあります:
syn match cCustomMember "\(\.\)\@<=[a-zA-Z0-9_]\+\s*\((\)\@!"
hi def link cCustomMember Number
基本的に私がここで言おうとしているのは.
、前に があり、その後に複数の単語の文字が続き、オプションで空白が続き、括弧が続かないことを確認することです。
しかし、正規表現を強調表示する上記の構文は、Vim では正しく機能しないようです。たとえば、次のようなコードがある場合:
getWrapper()->error( NO_VALID_ID, CONNECT_FAIL.code(), CONNECT_FAIL.msg());
.msg と .code は強調表示されますが、最後の文字は強調表示されません。しかし、メンバー関数を強調表示したくありません (丸括弧で終わります)
Pythonのこの正規表現の問題にちょっと似ていると思います:
a = re.compile("(?<=\.)(?:\w+)(?!\()")
print a.search(".test(").group() #produces tes, which it's desired to match nothing
print a.search(".test").group() # produces test
個々の文字ではなくグループ全体を否定先読みする方法。