LoginSignup
6
6

More than 5 years have passed since last update.

【vimめも】 4. テキストオブジェクト

Last updated at Posted at 2018-03-11

テキストオブジェクトってなに?

文字列を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のどこかにカーソルがある状態でviweach_with_indexを選択した状態でビジュアルモード

前回:【vimめも】 3. レジスタ
次回:【vimめも】 5. insertモード・visualモードの基本的な操作

6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6