今更ながらvim-easymotionを導入してみた

vim-easymotionとは

vimには様々なカーソル移動がデフォルトで用意されていて、ほとんどの場合はキーを数回叩けば目的地にたどり着けるようになっている。
だが、移動のために叩くキーを最小にしようとするとそれなりに考えないといけないことが辛い所。
スーパーハカーのみなさんはそれくらい朝飯前かもしれないし、それなりに場数を踏めば早くなるのだろうができることなら避けたいよねっていう。
そんな要望に応えるのがvim-easymotion。

vim-easymotionで何ができるの?

具体的に以下の状況を考えてみる

f:id:syguer:20140406194907p:plain

このとき、33行目のconsole.logの出力を変えるために移動したい。
vimの標準機能を駆使すると僕のミニマムブレインのなかでは以下の感じになると思われる。

10j10j10jjjwwwww
# 何も考えないとこんな感じで愚直に移動を・・・

32jfE 
# とりあえずjとwの連打をやめる

:33fE
# j使わないで直接33行目に移動。行間を暗算する手間が省けた

/E
#今回の例だとこれ1回で移動できるが、間にEがいっぱいあると更にnを複数回叩くことに

このようにキーの移動に対して思考のステップが必要だ。

そこでvim-easymotionを使った場合はどうなるか。
まずはおもむろにLeader(\キー) + wを押してみよう

f:id:syguer:20140406194928p:plain

何やら暗号チックな変換が行われて文字がハイライトされている。
このハイライトされている文字、これはキーボードのキーに対応している。
vim-easymotionはLeader(\キー) + wを押すと単語('w'ard)とキーボードをマッピングしてくれるのだ。
目的の位置は;cという2連続のキーにマッピングされているのがわかるだろうか。
移動してみる。

;を叩く。

f:id:syguer:20140406194947p:plain

親切に;と組み合わせになっているキーだけにハイライトが変わった。
cを叩く。

f:id:syguer:20140406194956p:plain

あっという間だ。何も考えなくてもよい。押したキー数も4キーだけだ。
ハイライトしてくれるので僕のようなGUI世代の情弱でもとても理解しやすい。

vim-easymotionの導入

僕はNeoBundleを使っているので.vimrcに以下のように追記して:NeoBundleInstallした。

NeoBundle 'Lokaltog/vim-easymotion'

次にキーバインドを登録する。以下のようにすると一括でデフォルトの操作を読み込んでくれる。

map  (easymotion-prefix)

これで準備完了。これだけでカーソル移動の悩みが解決できる素晴らしさ。

その他の操作

今回は「Leader(\キー) + w」を取り上げたが、w以外にも色々使える。
eなら単語の末尾にマッピングするし、f + characterでcharacterに当てはまるものにマッピングをする(Leader(\キー) + fa」とすればすべての"a"にキーをマッピングする)
「Leader(\キー) + w」でほとんど問題ないと思われるが、状況に応じて色々使い分けると更に楽になるかもしれない。