synID?

論理シミュレーション用に使ってるオレオレ言語とか、某社組み込み用統合開発環境Hewのコマンドファイルとかのsyntaxをvim勉強のついでに書いてみよう、というなんともドンキホーテーなことをはじめてみるが、流石に知識が足りなさ過ぎて途方にくれる。syntax.txtを読むのが筋なんだろうけど、面倒くさがって直接他の言語用のsyntaxから読み始める(バカ)。なんとなくsynの定義の仕方くらいはわかってきたけど、どうつながるのかまだ理解できてない。
目的達成度はともかく、副作用として :command の -nargs, や -complete とかを理解したり, col(), line()とか、初歩的なところがだいぶ理解できてきて少しうれしい。
けどsynIDって何ぞや?というところで完全に止まる。たぶんsynで定義したやつに振られてるIDだよなあ、と、とりあえず

:nn ee :echo eval("synID(line('.'), col('.'),0)")<cr>

とかしてあちこち'ee'してprobeしてみると,,, おお、ハイライトされてるところでなんか値が出てくる。

:nn ef :echo eval("synIDattr(synID(line('.'), col('.'),0), 'name')")<cr>

とattrを拾ってみると、なーんだ、予想通りか。
synID = vimFunctionとかが気になる。文法構造はどうやってるのかとvim.vimを覗いてみると、

syn match   vimFunction  "\<fu\%[nction]!\=\s\+\(\(<[sS][iI][dD]>\|[Ss]:\|\u\)\i*\|g:\(\I\i*\.\)\+\I\i*\)\ze\s*("  contains=@vimFuncList nextgroup=vimFuncBody

なるほど、こういうのがあるのか\(\)の中かな?ネストしてるが・・・・
というかそろそろsyntax.txt読もう。ばかばかしくなってきた。