【一人 vimrc advent calendar 2017】autocmd FileType 時に設定を追加する場合の注意点【20日目】
一人 vimrc advent calendar 2017 20日目の記事になります。
前回filetype
の設定に関する記事を書いたのですが、今回はそれに関係するお話。
autocmd FileType
等で設定するときの注意点
autocmd FileType
などで『任意の filetype
に対して』設定を行う際は基本的には『そのバッファでのみ』反映される設定を行います。
ですので、オプションやキーマップなどはすべてバッファローカルにして設定する必要があります。
オプションの設定
オプションを設定する場合は :set
ではなくて :setlocal
を使用します。
" なんかいろいろ設定 setlocal cindent setlocal cinoptions+=:0 setlocal matchpairs+=<:>
ただし、オプションによってはバッファローカルではなくてグローバルでしか設定できないオプションがあるので注意してください。
キーマッピング
キーマッピングは引数に <buffer>
を追加することでバッファローカルとして設定することができます。
" 最後に定義された include 箇所へ移動してを挿入モードへ nnoremap <buffer> <Space>ii :execute "?".&include<CR> :noh<CR> o
Ex コマンド
Ex コマンドの場合は -buffer
を追加します。
command! -buffer Hoge echo "hoge"
autocmd
autocmd
の場合はちょっと手間で、augroup
を利用します。
" filetype 用の augroup を用意する augroup my-vimfiler " その augroup の <buffer> を削除する autocmd! * <buffer> " autocmd は <buffer> を追加して定義する " こうすることでバッファローカルの autocmd になる autocmd CursorHold <buffer> execute "normal \<Plug>(vimfiler_print_filename)" " autocmd CursorMoved <buffer> execute "normal \<Plug>(vimfiler_print_filename)" augroup END
このようにグローバルの autocmd
と同様に autocmd
が2回設定されることを防ぐために augroup
を利用する必要があります。
まとめ
- オプションなどを設定する場合は何に対して設定するのか注意しよう
ちなみに1つのバッファで複数の filetype
を切り替えて使う場合の注意点もあるんですが、気力が尽きたので機会があれば別に書きます…。