もた日記

くだらないことを真面目にやる

Vimメモ : vim-easymotionで簡単にカーソル移動

vim-easymotion


カーソル移動を簡単にするvim-easymotionプラグインを試してみる。
Vimのカーソル移動と言えばhjklキーでの基本的な移動や、wキーでのワード単位の移動などがある。
例えば、下記テキスト(ちなみに、このテキストはヘルプに書いてあったものだが出版、ウェブデザイン分野の典型的なダミーテキストらしい)でカーソルが行頭にあったとする。sitの位置までカーソルを移動するためには、3ワード分進む必要があるため、3wと入力すればよい。

<cursor>Lorem ipsum dolor sit amet.

もちろんこの方法でもよいが、vim-easymotionを使うと見た目にわかりやすくカーソル移動ができる。vim-easymotionをインストールした状態で<Leader><Leader>wと入力すると以下のように各ワードの先頭がハイライトされる。

f:id:wonder-wall:20160403213625p:plain

ここで赤色でハイライトされた文字を入力するとその場所に移動できる。sitへカーソル移動したい場合はdを入力すればよい。このように見た目にわかりやすくカーソル移動できるのがvim-easymotionの基本的な考えらしい。テキストが長い場合などは非常に便利。

インストール


NeoBundleの場合は下記行をvimrcに追加。

NeoBundle 'easymotion/vim-easymotion'


使い方


はじめに、easy-motionのプレフィックスキーは他のプラグインとの衝突を避けるため<Leader><Leader>となっているが、前バージョンのように<Leader>としたい場合は下記行をvimrcに追加する。

map <Leader> <Plug>(easymotion-prefix)


使い方はヘルプを見るといろいろなキーマッピングが紹介されているが使いこなせないのでREADME.mdに書かれていた最小設定を参考にする(なお、この設定ではデフォルトマッピングを無効にしているので冒頭で紹介した<Leader><Leader>wは使えなくなる)。

map <Leader> <Plug>(easymotion-prefix)
let g:EasyMotion_do_mapping = 0 " Disable default mappings

" Jump to anywhere you want with minimal keystrokes, with just one key binding.
" `s{char}{label}`
" nmap s <Plug>(easymotion-overwin-f)
" or
" `s{char}{char}{label}`
" Need one more keystroke, but on average, it may be more comfortable.
nmap s <Plug>(easymotion-overwin-f2)

" Turn on case insensitive feature
let g:EasyMotion_smartcase = 1

" JK motions: Line motions
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)


上記設定での使い方として下記のテキストを例に説明する。

f:id:wonder-wall:20160403220748p:plain

まず<Leader>sを入力すると下記コマンドラインが表示される。

f:id:wonder-wall:20160403221044p:plain

ここで9行目のsqlite3部分に移動したい場合は、検索文字列としてsqの2文字を入力する。
そうすると下図のようにハイライトされるので、目的の位置のdを入力すれば移動が完了する。

f:id:wonder-wall:20160403221053p:plain

それ以外の移動方法としてjの代替として<Leader>jと入力すると図のようにカーソル以下の行がハイライトされるので行移動が簡単にできる。

f:id:wonder-wall:20160403221154p:plain