49
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-18

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

キー|動作
---+---
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ライフで困ることはあまりないと思います。
上級がないのは仕様です。
なお赤が見づらいのは私が軽く色盲だからです。麻雀の赤ドラもたまに黒く見えます。

49
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?