この記事は Vim 8.0 Advent Calendar の 20 日目の記事です。
Vim 8.0 では autocmd イベントも新しく追加されています。
TabNew
新しくタブページが開かれた際に発生します。例えば :tabnew
Ex コマンドを使うと、以下の順番でイベントが発生します。
- WinLeave
- TabLeave
- WinNew
- WinEnter
- TabNew
- TabEnter
TabClosed
タブページが閉じられた際に発生します。例えば、:tabclose
Ex コマンドでカレントタブページを閉じると、以下の順番でイベントが発生します。
- BufLeave
- WinLeave
- TabLeave
- TabClosed
- WinEnter
- TabEnter
- BufEnter
WinNew
新しいウィンドウが作成された際に発生します。Vim 起動時に開かれるウィンドウに対しては発生しません。
CmdUndefined
定義されていないユーザー定義コマンドを実行しようとした際に発生します。
パターンはコマンド名に対してマッチングが行われ、<amatch>
と <afile>
は実行しようとしたユーザー定義コマンド名に設定されます。しかし、<amatch>
は正しく展開されないようなので、<afile>
を使うのがよいでしょう。
イベントの実行中に存在しなかったコマンドを定義すれば、イベント終了後にコマンドが実行されます。
以下の例は、Foo
で始まる未定義の Ex コマンドを実行すると、その場で自分自身のコマンド名を出力する Ex コマンドを定義します。
augroup example
autocmd!
autocmd CmdUndefined Foo* execute 'command! -nargs=*' expand('<afile>') 'echo' string(expand('<afile>'))
augroup END
FooBar
" => FooBar
OptionSet
オプションが設定された際に発生します。
パターンは、常に短縮していないオプション名に対してマッチングが行われ、<amatch>
にはオプション名が設定されます。
また、以下の組み込み変数に設定されたオプションの値の情報が格納されます。
組み込み変数名 | 説明 |
---|---|
v:option_old |
変更前のオプションの値です。 |
v:option_new |
変更後のオプションの値です。 |
v:option_type |
設定された変数のスコープです。global か local が入ります。 |
'key'
オプションの場合は、セキュリティのためイベントは発生しません。
TextChanged
ノーマルモードでカレントバッファのテキストが変更された際に発生します。このとき、b:changedtick
が更新されます。
このイベントはそれなりの頻度で発生します。重い処理を行う場合は十分注意すべきです。
TextChangedI
挿入モードでカレントバッファのテキストが変更された際に発生します。ただし、補完のポップアップメニューが表示されているときは発生しません。
このイベントは非常に頻繁に発生することに気を付けてください。重い処理を行うと、ユーザー体験が著しく損なわれます。