1

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

個々の文字ではなくグループ全体を否定先読みする方法。

4

1 に答える 1