テキストオブジェクトってなに?
文字列を1つのまとまりとして扱うための仕組みで
オペレータと組み合わせることで、簡単に範囲を選択して操作を行える
- メソッドの引数の中身だけ変えたい時
- ハッシュのブレスごとコピーしたい時
- 文字列の中身(ダブルクォートの中)だけ削除したい時
- カーソルの単語だけを選択したい時
などなど
ヘルプの内容
helpにて調べると、こんな説明がされてる
次のものはビジュアルモードかオペレータコマンドの後でのみ使うことができる一連の コマンドを示しています。
"a" で始まるコマンドは "a" (1つの) まとまりをホワイトスペースを含めて選択します。
"i" で始まるコマンドはまとまりの "inner" (内部) をホワイトスペースを含まずに選択するか、もしくはホワイトスペースのみを選択します。
ですので、"inner" コマンドは常に "a" コマンドより少なくテキストを選択する ことになります。
簡単にいうと、
内側がいいときはi
を、外側も含めたいときはa
を使いなさい
ということ(?)
使い方
オペレータコマンド + (回数指定) + 内部/外部指定 + テキストオブジェクトの種類の指定
オペレータのおさらい
オペレータ | 意味 |
---|---|
v | 文字の選択(ビジュアルモード) |
y | 文字のヤンク |
d | 文字のヤンク+削除 |
c | 文字のヤンク+削除+挿入モード |
gu | 文字の小文字変換 |
gU | 文字の大文字変換 |
~ | 文字の小文字大文字の入れ替え |
テキストオブジェクトの範囲と種類
iのもの | 意味 | aのもの | 意味 |
---|---|---|---|
iw | 単語 | aw | 単語(空白含む) |
i[ or i] | [ ]の中 | a[ or a] | [ ]も含めたブロック |
i( or i) | ( )の中 | a( or a) | ( )も含めたブロック |
i{ or i} | { }の中 | a{ or a} | { }も含めたブロック |
i< or i> | < >の中 | a< or a> | < >も含めたブロック |
it | タグの中 | at | タグを含めたブロック |
i” | “の中 | a” | “も含めた文字列 |
i' | 'の中 | a' | 'も含めた文字列 |
i` | `の中 | a` | `も含めた文字列 |
【使用例】
メソッドの引数の中身だけ変えたい時
def foo(xxx = false)
end
括弧の中にカーソルがある状態でci)
で中身を削除して挿入モードへ
ハッシュのブレスごとコピーしたい時
{:xxx => 3, :yyy => 5}
括弧の中にカーソルがある状態でya}
でハッシュをヤンク
文字列の中身(ダブルクォートの中)だけ削除したい時
error = "エラーが発生しました"
括弧の中にカーソルがある状態でdi"
で文字列を削除
カーソルの単語だけを選択したい時
messages.each_with_index do |_,i|
p "#{i} : #{_}"
end
each_with_index
のどこかにカーソルがある状態でviw
でeach_with_index
を選択した状態でビジュアルモード