2

すべての仮想メソッドを別の色で強調表示するために「仮想」で領域を開始したいのですが、cpp.vim ファイルでキーワードとして既に定義されている仮想であるため、領域の一致は実行されません。私は次のことを試しました

syn region   cVirtualMethod   start="virtual" end=";" contains=cppType
hi cVirtualMethod ctermfg=red

しかし、それは機能しません。ただし、cppType から virtual を削除すると、行全体が強調表示されます (公平に言えば、メソッド名だけが望ましいですが、それも良いことです)。

cpp.vim の仮想ハイライトを残して (仮想は最終的に緑色になる)、メソッド名だけをハイライトする方法はありますか?

4

2 に答える 2

1

構文キーワードは常に領域よりも優先されるためvirtual、構文キーワードとして削除することは避けられません。

領域の開始のハイライト グループを定義することで、ハイライトを維持できます (終了ではありません。これが引数の順序が逆になっている理由です)。

:syn region   cVirtualMethod end=";" matchgroup=cppType start="\<virtual\>"

それでも、内側の領域全体が強調表示されます。:syn-matchこれを回避するには、メソッド名のみに一致する を追加し、それを上記の領域に含め:highlight、領域の代わりに を配置します。

于 2013-03-20T13:15:40.057 に答える
0

これがうまくいくかどうかテストできますか?

hi! virtualMethod ctermfg=red
call matchadd("virtualMethod", "virtual.*;")

その場合は、そのmatchadd呼び出しに autocmd を追加できます

于 2013-03-20T12:52:02.293 に答える