テキストオブジェクト覚え書き

vim使い初めて10ヶ月ぐらい経つけど(というか本気で使い始めたのはMacBook買った6月から)、テキストオブジェクトがあまりにも活用できてないことに気づいた。
(それでもIDEで開発してた時に比べると集中力とか効率とかは格段に上がってますが)
なのでsurround.vimも含めて基本をきっちり押さえておくことにする。

標準コマンド

例えばdi"はカーソルが置いてあるテキストの"(ダブルクォーテーション)の中(iはinner?)を削除(d)する。
同範囲を選択するにはdをvに、挿入モードで書き換えるならdをcにしてやる。
以上を踏まえ、操作の種類に関するポイントは以下の3つ。

  1. 削除する場合はd(delete)から
  2. 選択する場合はv(visual)から
  3. テキストを変更する場合はc(change)から

と覚える。

続いて範囲。

  1. ○○を含めて選択する場合はa(all)
  2. ○○の内側を選択する場合はi(inner)

で最後は対象となる○○を指定する。

  1. <h1>ココ</h1>タグのtextノードならt(tag?)
  2. <ココ>タグ自体なら<,>のどっちか
  3. その他、"とか'とか(とか囲まれているものならなんでも

上記踏まえて<操作>(d:delete, v:visual, c:change)<範囲>(a:all, i:inner)<対象>(t, ", ', (, {, [, %, ?)
で覚えればよさそう。

surround.vim

標準コマンドだと「既に囲まれているもの」を対象としますが、surround.vimを使うと「新たにテキストを囲む」「テキストを囲んでいる文字を置き換える」ということができるようになります。

新しく囲む

対象の範囲を新しく囲む場合はysから始めます。(なんでysなのかはよくわかっていない)
例)

置換え前 置換え後   コマンド
'hoge' -> ('hoge') ・・・ysa')  #ys a'('を含む範囲を)(で
'hoge' -> '(hoge)' ・・・ysi')   #ys i'('の中を) (で
hoge  ->  (hoge)    ・・・yss)   #ys s(囲む) (で
囲み文字を置き換える

囲み文字を置き換える場合はcs(多分change surround)から始めます。

置換え前 置換え後   コマンド
'hoge' ->  "hoge" ・・・cs'"  #cs(囲みを変える)'を"に
囲み文字を削除

囲み文字を削除する場合はdsから始めます。

置換え前 置換え後   コマンド
'hoge' ->  hoge ・・・ds'  #ds(囲みを削除) 'を

多分このあたりが基本かな。
挿入モード、ビジュアルモードの時のsurroundはキーバインド衝突してるのか上手く動かずよくわかっていない。

次買う書籍は「Vimテクニックバイブル」だな。