Vim の TextYankPost イベント
Vim 8.0.1394 にてオートコマンドイベント TextYankPost
が実装されました。
ヤンクコマンドなどでレジスタが更新された際に処理をフックすることができます。名前に Yank
とありますが、 d
コマンドや c
などもレジスタを更新するので同様に TextYankPost
を呼びます。このパッチはイベントとともに v:event
という変数を提供しており、これを通して関連する情報を取得できます。
" TextYankPost を発火したオペレータコマンド autocmd TextYankPost * echomsg v:event.operator " ヤンクされたテキスト (行ごとに分割された文字列のリスト) autocmd TextYankPost * echomsg string(v:event.regcontents) " 更新されたレジスタ autocmd TextYankPost * echomsg v:event.regname " レジスタの種類 (:help getregtype()) autocmd TextYankPost * echomsg v:event.regtype
この機能の原型は実はかなり昔に提案されたものだったんですが、ついに取り込まれました。
個人的な所感というか予想ですが、あまりにも限られたプラグイン、いわゆる Yankring 的なもののための機能!という感じで、そういう点で後に回されていたのかもしれません。とはいえ、かくいう私ものどからゲロでるほど欲しかったのでうれしいです。早速ビルドしました。近々vim-highlightedyankもアップデートするので Vim をビルドしましょう。(古い Vim で使えなくなるわけではないです)
追記:
あと、いじっていて気が付きましたが、何もレジスタを指定しないと v:event.regname
が空なので、ユーザがコマンドにレジスタを明示的に指定したかしていないかを判別できますね。つまり ""yy
と yy
を見分けられます。これ、 v:register
では実現できないのでユーザ定義オペレータを作るときに困っていたのですが、 TextYankPost
ごしなら限定的に可能になりました。使い道は…ないかな。