vim では移動、編集に行数を指定することがよくあります。そのために行番号を画面に表示して 5j 5 行下へ移動、d6k 6 行上まで削除などとするわけですが、パッと見て目標を 5 行下、6 行上などと見積もることはなかなか難しいです。
そこでオススメなのが相対行番号です。これは現在カーソルがある位置から見て何行離れているかを画面に表示します。.vimrc
内で set number
などと指定する代わりに set relativenumber
と入力すると有効になります。
set relativenumber
easymotion プラグイン
この考えを更に発展させたのが easymotion プラグインです。
EasyMotion – Vim motions on speed! : vim online
http://www.vim.org/scripts/script.php?script_id=3526
Lokaltog/vim-easymotion
https://github.com/Lokaltog/vim-easymotion/
github でソースが公開されていますので、インストールは Bundle 'Lokaltog/vim-easymotion'
→ BundleInstall
で完了です。(vundle 利用の場合)
使い方
ちょっとデフォルトでは使いにくかったので設定を ~/.vimrc
に追加しました。以下の説明はこの設定の元に行います。
" ホームポジションに近いキーを使う let g:EasyMotion_keys='hjklasdfgyuiopqwertnmzxcvbHJKLASDFGYUIOPQWERTNMZXCVB' " 「'」 + 何かにマッピング let g:EasyMotion_leader_key="'" " 1 ストローク選択を優先する let g:EasyMotion_grouping=1 " カラー設定変更 hi EasyMotionTarget ctermbg=none ctermfg=red hi EasyMotionShade ctermbg=none ctermfg=blue
行移動
たとえば画面の上方にカーソルを移動したいとしましょう。普通なら行番号を見て 15 行上だな、よし、15k っと……などとするわけです。
しかし、如何な達人 Vimmer であろうとも、行数を一瞬で判断するのはキツいです。そこで、easymotion プラグインを使っている場合は 'k と押すと……
表示された文字が薄くなり、行頭にアルファベット小文字で目立つショートカットが現れます。
Q を押すと、目的の場所にカーソルが移動しました。行を数える必要もありません。便利ですね〜。
単語移動
次はもうちょっとピンポイントでの移動です。画面の真ん中にある URL の位置にカーソルを移動したいとします。
'w と押すと、ワードごとにショートカットが出現しました。今度は大文字アルファベットも混ざっています。
Shift + K を押すと、目的の場所にカーソルが移動しました。
2 ストローク入力
遠くに移動しようとすると、一回の入力では移動先を特定できない場合があります。画面下部に見える正規表現の場所まで移動しようと 'w と押すと……
画面下部、カーソルの位置から遠いところはショートカットがダブって表示されています。気にせず Shift + B を押してみましょう。
2 文字目の入力を求められました。今回は目標の位置である U を押します。
ちょっと手間はかかりましたが遠くまで移動できました。
ショートカット一覧
今まで 'k と 'w の説明を行ってきましたが、他にもたくさんのコマンドが定義されています。
コマンド | 意味 |
---|---|
詳しくは |
|
'fx |
カーソルの右側に現れる x (任意の文字)を探す。 |
'Fx |
カーソルの左側に現れる x (任意の文字)を探す。 |
'tx |
カーソルの右側に現れる x (任意の文字)の一文字左を探す。 |
'Tx |
カーソルの左側に現れる x (任意の文字)の一文字右を探す。 |
'w |
カーソルの後に現れる word の最初の文字を探す。 |
'W |
カーソルの後に現れる WORD の最初の文字を探す。 |
'b |
カーソルの前に現れる word の最初の文字を探す。 |
'B |
カーソルの前に現れる WORD の最初の文字を探す。 |
'e |
カーソルの後に現れる word の最後の文字を探す。 |
'E |
カーソルの後に現れる WORD の最後の文字を探す。 |
'ge |
カーソルの前に現れる word の最後の文字を探す。 |
'gE |
カーソルの前に現れる WORD の最後の文字を探す。 |
'j |
上方に移動する。 |
'k |
下方に移動する。 |
'n |
前方検索。 |
'N |
後方検索。 |
いろいろありますが、ぶっちゃけ、'w 'b 'j 'k だけ覚えとけば用は足りると思います。
easymotion の欠点
大変便利な easymotion ですが、いくつか不満もあります。
2 バイト文字がずれる
'w などの単語移動をしようとすると、全角文字では大幅に位置がずれてしまいます。これはどうしようもない感じ。
ビジュアルモードやオペレータコマンドで使えない!
V でビジュアルモードに入った後に、範囲指定に 'w などのコマンドを使おうとしてもうまくいきません。同様に、オペレータコマンド(c 変更、d 削除など)と同時にも使えません。
この辺は割り切って、最初に上げた相対行番号を使ってしのぎましょう。
Pingback: vimの設定ファイル(.vimrc)を晒してみる | Kitchen Garden Blog