1. Qiita
  2. 投稿
  3. Vim

Vim 8.0 Advent Calendar 20 日目 新しいイベント

  • 3
    いいね
  • 0
    コメント
に投稿

この記事は Vim 8.0 Advent Calendar の 20 日目の記事です。

Vim 8.0 では autocmd イベントも新しく追加されています。

TabNew

新しくタブページが開かれた際に発生します。例えば :tabnew Ex コマンドを使うと、以下の順番でイベントが発生します。

  1. WinLeave
  2. TabLeave
  3. WinNew
  4. WinEnter
  5. TabNew
  6. TabEnter

TabClosed

タブページが閉じられた際に発生します。例えば、:tabclose Ex コマンドでカレントタブページを閉じると、以下の順番でイベントが発生します。

  1. BufLeave
  2. WinLeave
  3. TabLeave
  4. TabClosed
  5. WinEnter
  6. TabEnter
  7. 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 設定された変数のスコープです。globallocal が入ります。

'key' オプションの場合は、セキュリティのためイベントは発生しません。

TextChanged

ノーマルモードでカレントバッファのテキストが変更された際に発生します。このとき、b:changedtick が更新されます。
このイベントはそれなりの頻度で発生します。重い処理を行う場合は十分注意すべきです。

TextChangedI

挿入モードでカレントバッファのテキストが変更された際に発生します。ただし、補完のポップアップメニューが表示されているときは発生しません。
このイベントは非常に頻繁に発生することに気を付けてください。重い処理を行うと、ユーザー体験が著しく損なわれます。

この投稿は Vim 8.0 Advent Calendar 201620日目の記事です。
Comments Loading...