Emacs (Vimpulse)でtext-objectでも使えるコメントアウトoperator

EmacsでviをエミュレートするViperを強化してVimをエミュレートするようにしたのがVimpulse. ここ最近開発が活発で, 設計もかなりスマートになって, ゆくゆくは本家Viperを置き換えることを目指すまでになっている. 入れる場合は最新版をgit cloneする.

ぼちぼち散歩 Vimでoperator-userを使って他のプラグインをoperatorとして使えるようにしてみたを見て, Vimpulseでもコメントアウト/アンコメントするoperatorがあったら便利そうなので作ってみた.

実はVimpulseの中のvimpulse-operator.elに道具は揃っている. リージョンに対してなにかするコマンドがあれば, それをvimpulse-convert-to-operatorマクロに渡すだけでoperatorが出来上がる. たとえば.emacsで以下のようにしておくと, CCで行をコメントアウト/アンコメントしたり, C$で行末までをコメントアウトしたり, Ciwでカーソル位置の単語だけコメントアウトしたり, Ci(でカーソル位置を囲む括弧の内側をコメントアウトしたりできる.

(vimpulse-convert-to-operator comment-or-uncomment-region)
(define-key viper-vi-basic-map (kbd "C")
  'comment-or-uncomment-region-operator)
(define-key vimpulse-visual-basic-map (kbd "C")
  'comment-or-uncomment-region-operator)

追記

requireするだけで使えるようにプラグイン化した. minor-modeになっているので, 特定のバッファで有効/無効にしたりもできる(デフォルトではすべてのバッファで有効).

http://github.com/tarao/vimpulse-plugins/
http://github.com/tarao/vimpulse-plugins/raw/master/vimpulse-operator-comment.el