中身をまとめて狙う
ここまでは「カーソルからどこまで」で範囲を決めてきました。テキストオブジェクトは「いま囲まれているもの」を単位にするので、単語の途中にいても、カッコのどこにいても、その中身をまるごと指定できます。先頭までカーソルを動かす手間が消えます。
i と a の対
テキストオブジェクトは i(inner・中身だけ)か a(around・囲みも含む)に、対象を表す1文字を続けて書きます。iw なら単語、i" なら引用符、i( ならカッコです。
この2文字はオペレータの後ろに置くもので、単独では使えません。d c y のどれと組み合わせても同じ範囲になるので、覚える対象は「範囲の指定の仕方」だけで済みます。
なぜ cw より ciw なのか
cw はカーソルから右だけを消すので、単語の途中で押すと前半が残ります。そのため cw を使うには先に b などで単語の先頭へ戻る必要があります。
ciw は単語のどこにいても同じ結果になるので、移動の手間が消えます。カーソル位置を意識しなくてよくなるぶん、考えることが1つ減るのが大きな利点です。
ほかの対象
ここで扱った以外にも、タグ(it / at)、段落(ip / ap)、文(is / as)などがあります。プラグインを入れると対象を自分で増やすこともできます。
この練習ページでは単語・引用符・カッコの3種類だけを扱っています。まずはこの3つが手に馴染めば、実際の編集のほとんどは間に合います。
カッコには別名がある
丸カッコは i( と書いても i) と書いても同じで、さらに ib(block)という別名もあります。波カッコは i{ i} iB のどれでも構いません。
開きカッコと閉じカッコのどちらを打っても同じという点が地味に効きます。Shift を押した状態のまま ci) と打っても意図どおりに動くので、キーの押し間違いで失敗しにくくなっています。
クォートは行の中だけを見る
i" や i' が探すのは、カーソルがいる行の中にあるクォートだけです。複数行にまたがった文字列の中では期待どおりに動きません。
もう1つ知っておきたいのは、クォートの外側にカーソルがあっても、その行の右側にあるクォートを見つけて中身を対象にする点です。行頭から ci" と打っても、その行で最初に見つかった引用符の中身が対象になります。カッコのテキストオブジェクトは囲まれている必要があるので、この点だけ挙動が違います。
iw と aw の空白の扱い
iw は単語そのもの、aw は単語と後ろの空白です。後ろに空白が無い場合は、代わりに前の空白が含まれます。daw で単語を消すと、前後どちらかの空白もまとめて消えるので、消したあとに空白が2つ並ぶことがありません。
引数リストから1つ消すときのように「区切りの空白ごと消したい」場面では aw、単語だけ差し替えたい場面では iw と使い分けます。ciw のほうを圧倒的によく使うのは、書き換えでは空白を残したいからです。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| ciw | 単語を書き換え |
| daw | 単語を空白ごと削除 |
| ci" | 引用符の中身を書き換え |
| ci( | カッコの中身を書き換え |