vimrc には、augroup
を書くことが一般的です。
augroup MyVimrc autocmd! augroup END
vimrcの上の方にこの3行を書いて、autocmd
を使用する度に以下のように書きます。
autocmd MyVimrc FileType help nnoremap <buffer> q <C-w>c
こうすることにより、vimrcを複数回読み込んでもautocmd
が複数回実行されなくなります。
ですが、毎回MyVimrc
と書くのはめんどくさいですね。忘れてしまうかもしれません。
そんな問題が、rhysdさんのvimrcを読んでいたら解決しました。
dotfiles/vimrc at 2adcc01ffad9873f69441dab9bf0d3ac5cf337e2 · rhysd/dotfiles · GitHub
" Vimrc augroup augroup MyVimrc autocmd! augroup END command! -nargs=* Autocmd autocmd MyVimrc <args> command! -nargs=* AutocmdFT autocmd MyVimrc FileType <args> " XXX AutocmdFT vim highlight def link myVimAutocmd vimAutoCmd AutocmdFT vim match myVimAutocmd /\<\(Autocmd\|AutocmdFT\)\>/
このようにすると、先ほどのautocmd
がこのように書けます。
Autocmd FileType help nnoremap <buffer> q <C-w>c
便利ですね。しかし、これには問題があります。
上記のシンタックス設定だと、続くFileType
などのイベント名が正しくハイライトされません
そのため、先ほどのvimrcでhighlight
とmatch
している下2行を削除し、~/.vim/after/syntax/vim.vim
に次のように書きましょう。
highlight def link myVimAutoCmd vimAutoCmd syntax keyword myVimAutoCmd Autocmd skipwhite nextgroup=vimAutoEventList
これで、FileType
なども正しくハイライトされるようになりました。
この設定で、Autocmd
を使い続けている限りは問題なくハイライトされます。
ですが、実は普通にaugroup
を使った場合ではイベント名がハイライトされません。
そのため、先ほどの~/.vim/after/syntax/vim.vim
に次の2行を追記しましょう。
syntax match vimAutoGroup contained "\S\+" nextgroup=vimAutoEventList skipwhite syntax keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList,vimAutoGroup
これで、augroup
を使用した場合にきちんとイベント名がハイライトされるようになりました。