🦔
Vim再入門_期待する位置にカーソルを飛ばす(行内編)
Vimをすこし学べば、行内の移動はできます。ただしそれは「とりあえずw
かb
を何度か押して、あとはh
やl
で調整してたどり着く」ケースがほとんどでした。
この記事では、Vimを使いこなすため、より正確に自分が期待する箇所にカーソルを飛ばすコマンドを整理してみます。
前提となる知識
-
hjkl
: カーソルを上下左右に動かす -
w
: 次の単語の先頭に移動-
b
: 前の単語の先頭に移動
-
-
f<char>
: 現在のカーソル位置より右側にある<char>
へ移動-
;
: 直前のf
(または後述のt
)を繰り返す -
,
: 直前のf
(または後述のt
)を逆方向へ繰り返す
-
-
F<char>
: 現在のカーソル位置より左側にある<char>
へ移動
単語移動のボキャブラリーを増やす
e
で、現在の単語の末尾に移動できます。w
とh
の複合技のような感じで、「いったん飛んでからよく戻っている」という場合は、e
で一発移動できるようにしておきたいです。
空白区切りを考慮する
w
,b
,e
はそれぞれW
,B
,E
のパターンがあります。これはそれぞれ空白区切りを考慮した単語移動になります。
指定文字の直前へ移動する
t<char>
は、w
に対するe
のような感じで、f<char>
+j
つまり指定文字の"直前"に移動することができます。
なお逆方向へ移動するT<char>
もあります。
実行例
以下のコードを使って具体例を示します。
printf("Hello, World!");
1. 単語の末尾に移動 (e)
- 現在位置: printf("Hello, World!");
- 結果: printf("Hello, World!");
2. 空白区切りで次の単語に移動 (W)
現在位置: printf("Hello, World!");
結果: printf("Hello, World!");
3. 指定文字の直前に移動 (t<char>)
t!
を実行したとき
現在位置: printf("Hello, World!");
結果: printf("Hello, World!");
Discussion