ビジュアルモードで選択した要素の最後にキャレットを移動する
ブラウザで長い文章を読むとき、読んでるパラグラフなどを選択しながら読む癖があって、vimperator だと c v hjkl でやるわけだが、ずっと選択しっぱなしがイヤなので、ほどほどのところで Esc して選択解除したりする。するとキャレットが選択要素の最初になって、どこまで読んだかわからなくなりキーッとなって、これが相当なストレスであった。
で、なにげに caret-hint.js を読んでたら、こんな感じでやればいいのかとヒントを得た(まさに caret-hint !)ので、次のとおり書いてみた。というか、ほとんど caret-hint.js のパクリだけど。これで c v hjkl で選択していって、適当なところで n すると選択範囲の最後にキャレットが移動して、捗るわー。
mappings.addUserMap( [modes.VISUAL], ['n'], 'Move selection tail', function () { let win = new XPCNativeWrapper(window.content.window); let s = win.getSelection(); if (s.rangeCount <= 0) return false; let f = [s.focusNode, s.focusOffset]; s.collapse.apply(s, f); } );
さらに、次を定義すると m したら最後にキャレットが移動した後ビジュアルモードを終えるようになり、n と使い分けるとなかなかいい感じ。
vmap m n<ESC><CR>