Help us understand the problem. What is going on with this article?

縦横無尽に駆け回るvim(移動の話)

More than 5 years have passed since last update.

これは一番最初に覚えます

キー 動作
h
j
k
l

ここら辺は初級レベルです。

キー 動作
w 単語の先頭へ進む
b 単語の先頭へ戻る
0 行の先頭へ
$ 行の末尾へ
<CR> 次行にある最初の非空白文字へ
<C-f> 次ページへ
<C-b> 前ページへ
gg 文書の先頭行へ(最初の非空白文字)
G 文書の最終行へ(最初の非空白文字)
I 行内最初の非空白文字でインサートモードとなる
A 行末でインサートモードとなる
* カーソル下の単語を後方検索
# カーソル下の単語を前方検索
n 検索を進める
N 検索を戻る
% 括弧間の移動

*#は単語検索となるので部分一致で検索したい場合は/[keyword]としよう。

Ex:ススメを*で検索してもヤマノススメは検索に引っかからない。

オススメの設定

vimrc
" matchit {{{
source $VIMRUNTIME/macros/matchit.vim
let b:match_ignorecase = 1
" }}}
nmap <Tab> %
vmap <Tab> %

if/endなども%で移動できるようになるmatchitの読み込みです。
個人的に%が押しづらいため<Tab>にも割り当ています。

中級

キー 動作
<C-d> 半ページ次へ
<C-u> 半ページ前へ
'{a-zA-Z} m{a-zA-Z}でマークしたポジションへジャンプ
gi 最後に編集した位置でインサートモードとなる
ge 単語の末尾へ
W 単語の先頭へ進む(_:.などで繋がっているものも単語と見なす*1)
B 単語の先頭に戻る(*1)
E 単語の末尾へ(*1)
gE 単語の末尾に戻る(*1)
f{*} 行の末尾に向かってキーを検索
F{*} 行の先頭に向かってキーを検索
t{*} 行の末尾に向かってキーを検索(カーソルが検索文字の手前*2)
T{*} 行の先頭に向かってキーを検索(*2)
; 先頭に向かって繰り返して検索
, 末尾に向かって繰り返して検索
<C-o> ジャンプした部分に戻る
<C-i> ジャンプした部分に戻る
g; 変更履歴に戻る
g, 変更履歴に進む

半ページ次へとか半ページ前へはあまり使ってないけど...
g,は私の設定上qfixhowmと競合していて使えないです。
というより変更履歴はgundoを使うので必要ないです。
ftはこの後述するEasyMotionがNOTります。

プラグインを使う

.vimrc
NeoBundle 'Lokaltog/vim-easymotion'
" vim-easymotion {{{
let g:EasyMotion_do_mapping = 0
nmap s <Plug>(easymotion-s2)
xmap s <Plug>(easymotion-s2)
omap z <Plug>(easymotion-s2)
nmap g/ <Plug>(easymotion-sn)
xmap g/ <Plug>(easymotion-sn)
omap g/ <Plug>(easymotion-tn)
let g:EasyMotion_smartcase = 1
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)
let g:EasyMotion_startofline = 0
let g:EasyMotion_keys = 'QZASDFGHJKL;'
let g:EasyMotion_use_upper = 1
let g:EasyMotion_enter_jump_first = 1
let g:EasyMotion_space_jump_first = 1
hi EasyMotionTarget guifg=#80a0ff ctermfg=81
" }}}

例によってNeoBundleを使います。
EasyMotion_keysは自分の押しやすいキーを指定します。
私がホームポジションあたり(+qz)しか自信がないことが露呈しましたww
EasyMotion_keysのキーが少ない場合、移動先の候補が多数あると2文字打たなければいけなかったりします。
個人的に打ち間違えて変なとこにジャンプしてイラッとするよりはいいかなと思います。
hiハイライトを変えている部分は何も設定しないと蛍光赤みたいな色だったので非常に見づらいため変えています。
なおhicolorschemeより後に書く必要があるようです。

ちなみに動作はこんな感じ

easymotion1.gif

s[AnyKey][AnyKey][EasyMotion_key]([EasyMotion_key])

easymotion2.gif

g/[Keyword][EasyMotion_key]([EasyMotion_key])

EasyMotion_key<CR><Space>を押すと最寄りの検索語にジャンプします。
画面内の移動は移動したいところの2文字を見て、s[key][key]と打ち、表示された[EasyMotion_key]でジャンプします。
またg/は[Keyword]を打っている間に検索で引っかかった単語の位置にジャンプするため、うろ覚えでも明確に検索できるので便利です。

まとめ

最終的にEasyMotionが最高すぎます。
初級編を覚えておけばvimライフで困ることはあまりないと思います。
上級がないのは仕様です。
なお赤が見づらいのは私が軽く色盲だからです。麻雀の赤ドラもたまに黒く見えます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした