autocmdの syntaxの改造にトライ (syntax/vim.vim)
Lingr vim-users.jpでも相談させてもらったのですが、
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
に対して、
au myvimrc BufNewFile,BufRead *.html so <sfile>:h/html.vim
ってやると、「BufNewFile,BufRead」がハイライトされてない。。。
これをどうにかしたい。っているのが今回の内容。
※Vim初心者です。
Syntaxを調べる
syntax/vim.vimをなんとかしたい vim-jp/issues #155
より、
:echo synIDattr(synID(line("."), col("."), 1), "name")
にて確認するとありましたので、それで確認してみます。
au | BufNewFile,BufRead | *.html | so | |
vimAutoCmd | vimAutoEvent(List) | vimAutoCmdSpace | vimAutoCmdSfxList | vimCommand |
では、次はどうかというと。
au | myvimrc | BufNewFile,BufRead | * | . | html | so | |
vimAutoCmd | vimAutoEventList | vimAutoCmdSpace | vimAutoCmdSfxList | vimOper | vimVar | vimCommand |
となってました。
ってことは、単純に vimAutoCmdの次に来る keyword に [group] がないってことか。
:au[tocmd] [group] {event} {pat} [nested] {cmd}
" Autocmd {{{2 " ======= syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList syn match vimAutoCmdSfxList contained "\S*" syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList
ふむ。確かに [group] 考慮が無さそう。
どうやればいいんだろうか???
改造する。
@@ -304,10 +304,11 @@ " Autocmd {{{2 " ======= +syn match vimAutoCmdGroup contained "\a\+" contains=vimAutoEventList skipwhite nextgroup=vimAutoEventList syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent nextgroup=vimAutoCmdSpace syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList syn match vimAutoCmdSfxList contained "\S*" -syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList +syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoCmdGroup " Echo and Execute -- prefer strings! {{{2 " ===============
確かにこうすると
au myvimrc BufNewFile,BufRead *.html so <sfile>:h/html.vim
au | myvimrc | BufNewFile,BufRead | *.html | so | |
vimAutoCmd | vimAutoEvent | vimAutoEvent | vimAutoCmdSpace | vimAutoCmdSfxList | vimCommand |
ってなるので、ハイライトされるんだけど。。。
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
au | BufNewFile,BufRead | * | . | html | so |
vimAutoCmd | vimAutoEvent | vimOper | vimVar | vimCommand |
となってしまう。(´ε`;)ウーン…
確かにそうなんだけど・・・書き方分からない