LoginSignup
168
125

More than 5 years have passed since last update.

おさらい autocmd/augroup

Last updated at Posted at 2013-12-19

本記事は Vim Advent Calendar 2013 の 20 日目の記事です。
19 日目は @orga_chem さんによる、vim-splashを使い倒してこそ真のVimmerですぞ でした。@orga_chem さんは VAC2013 のトップ絵も書かれています。素敵ですよね、Vimgirl かわいい。

最近巷で噂の vimrc 読書会 ですが、この最中によく指摘される事柄として、autocmd に付随する augroup の定義がない、というものがあります。
autocmd は便利かつ多用されますが、その裏で気づかれにくい・知られにくいこの件について今回は記事を書いてみます。

autocmd の概要

autocmd は Vim で指定したイベントが起きた際に自動的に実行するコマンドを指定するコマンドです。

.vimrc
autocmd BufNewFile * put ='ビムゥ'

例えばこのような autocmd を定義すると、存在しない新しいファイルの編集を始める際に自動で

ビムゥ

と入力され、大変便利です。ここでは BufNewFile というイベントを指定しており、存在しないファイルの編集を始めたときにコマンドを実行させることができます。
イベント一覧については:help {event}を参照してください。

問題点

ところで .vimrc をモリモリ編集した後、再読み込みすると思います。:source ~/.vimrc
上記の設定がある .vimrc を再読み込みした後、新しいファイルを編集します。

ビムゥ
ビムゥ

上記のようになってしまうはずです。これは大事なことなので 2 回出たわけではなく、autocmd は上書きされずに複数回定義されてしまうからです。
au BufNewFile * で確認することができます。
.vimrc を読み込む際に autocmd! することで定義済みの autocmd が削除されこの問題は回避することができますが、想定していない autocmd の定義まで削除されてしまう恐れがあります。

augroup

そこで augroup を使っていきます。
augroupautocmd をグループ化します。

.vimrc
augroup vimrc_loading
  autocmd!
  autocmd BufNewFile * put ='ビムゥ'
augroup END

このように記述することで、autocmdaugroup vimrc_loading に属することとなります。グループの中で行われた autocmd! コマンドは同じグループの autocmd 定義のみを削除します。

.vimrc
augroup erase
  autocmd!
  autocmd BufNewFile * put ='ビムゥ'      " 消える
augroup END

autocmd erase BufNewFile * put ='ビムゥ?' " 消える

augroup erase
  autocmd BufNewFile * put ='ビムゥッ'      " 消える
augroup END

augroup not_erase
  autocmd BufNewFile * put ='ビムゥ!!'    " 消えない
augroup END

このようにして目的の autocmd だけを再定義する、リローダブルな .vimrc を書くことができます。

補足

実際のところ日本人の vimrc ではきちんと設定されていることがほとんどで、読書会で上がる際は大抵外国の方の vimrc ばかりだったりします。
ただ英語力が Vim 始めたての方がわかりにくいところでもあると思うので、そういう方のお役に立てばと思います。

以上 Vim Advent Calendar 2013 21 日目の記事でした、次回 22 日目は @harukey2525 さんです。

参考

http://whileimautomaton.net/2008/08/vimworkshop3-kana-presentation
http://vim-users.jp/2009/07/hack40/
http://vim-users.jp/2009/09/hack74/
http://vim-users.jp/2011/10/hack234/

168
125
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
168
125