Vim で operator 実行時にカーソルを移動させないような operator をつくった
さて、Vim で operator を実行するとカーソル位置が入力した motion の先頭へと移動してしまします。
これは c や d のようなバッファを変更する operator であれば便利なんですが、y などのバッファを変更しない operator であれば無駄にカーソルが移動してしまうだけなので不便と感じる事があります。
と、いうことで任意の operator の実行時にカーソルを移動させないようにするラッパー operator をつくりました。
[プラグイン]
NeoBundle 'kana/vim-operator-user' NeoBundle 'osyo-manga/vim-operator-stay-cursor'
[使い方]
移動したくない operator を operator#stay_cursor#wrapper() でラップして使用します。
" 任意の operator に対して移動しないようにさせる map <expr> c operator#stay_cursor#wrapper("c") " remap を呼び出すようにする map <expr> s operator#stay_cursor#wrapper("\<Plug>(operator-replace)", { "noremap" : 0 })
また、以下のマッピングはデフォルトで定義されています。
" y <Plug>(operator-stay-cursor-yank) " d <Plug>(operator-stay-cursor-delete) " c <Plug>(operator-stay-cursor-change) " operator-replace <Plug>(operator-stay-cursor-replace) " gu <Plug>(operator-stay-cursor-gu) " gU <Plug>(operator-stay-cursor-gU)
[所感]
Vim に慣れていると yank 時にカーソルが移動しないのはすごく気持ち悪く感じるんですが、それなりに便利そうだとは思います。
特に textobj の範囲が広い場合(textobj-indent とか)などだと有効だと思います。
要望や問題があれば Issues までお願いします。