段落とタグをまとめて狙う
iw や ci" と同じ仲間に、段落まるごとやHTMLタグの中身を指すものがあります。カーソルがその中にありさえすれば、始まりと終わりを自分で探さずに範囲を渡せます。
段落の区切りは空行
Vimの段落は、空行で区切られたひとかたまりの行です。文章の意味とは関係なく空行だけを見ているので、コードでも「空行で区切られたブロック」を dap で丸ごと動かせます。yap でコピーして p で貼れば、ブロックの複製になります。
タグは一番内側から
it at は、カーソルを囲んでいるタグの対を内側から探します。<div> の中の <p> の中にカーソルがあれば <p> が対象で、そこから dat を2回押せば外側の <div> まで消えます。
属性だけを直したいときは、開始タグの中で ci" を使うほうが早いこともあります。同じ「中身」でも、狙う単位を変えれば手数が変わります。
ip と ap の違い
ip は段落そのもの、ap は段落とその後ろに続く空行です。dap でブロックを消すと空行も一緒に消えるので、消したあとに空行が2つ並びません。dip だと中身だけが消えて空行が残ります。
ブロックを別の場所へ移すときは dap で消してから貼るときれいに収まり、中身だけ書き直すときは cip のように ip を使います。iw と aw の関係と同じ考え方です。
タグは対になっていないと効かない
it at は開始タグと終了タグの対を探すので、<br> や <img> のように閉じないタグは対象になりません。閉じ忘れがあるHTMLでも、意図しない範囲を掴むことがあります。
思った範囲にならないときは、いったん v で選択してから at を押すと、確定する前に反転表示で範囲を確かめられます。範囲が違えば at をもう一度押して1つ外側へ広げられます。
段落は文章にもコードにも使える
Vimの段落は空行だけを見ているので、対象がMarkdownの文章でもJavaScriptの関数でも同じように働きます。設定ファイルのように空行でセクションを区切ってあるファイルでは、yap でセクションを丸ごとコピーして p で複製する、という使い方が手早く済みます。
逆に、空行を入れない書き方をしているファイルではファイル全体が1つの段落になってしまいます。段落の区切りが自分の想定と合っているかは、} を押して段落の末尾へ飛んでみると確かめられます。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| dip | 段落の中身を削除 |
| dap | 段落を空行ごと削除 |
| cit | タグの中身を書き換え |
| dat | タグごと削除 |