テキストオブジェクトって何?
vim7位から追加された概念
あるルールに基づいたテキストのまとまり
何が良いの?
オペレータと組み合わせて、テキストオブジェクト単位での編集ができる
オペレータ?
テキストを削除したり、編集したりするコマンド
主なオペレータ
キー | オペレーション |
c | 変更 |
d | 削除 |
y | yank |
~ | 大文字/小文字入れ替え |
gu/gU | 全て小文字/大文字 |
テキストオブジェクトと組み合わせるのってどうするの?
オペレータコマンド + (回数指定) + 内部/外部指定 + テキストオブジェクトの種類の指定
よくわかんないので具体的に
こんなテキストがある時(|は、カーソル位置)
kp3k3 "te|st" 2jo2jp
vi" を押下すると、以下のように、ビジュアルモードで選択される(~~~~ は選択範囲)
kp3k3 "te|st" 2jo2jp
~~~~~
vi" で、 カーソル上の " で囲まれている文字列の内部を、ビジュアルモードで選択 という意味になる
それぞれのコマンドの意味
v : ビジュアルモードで選択
i : inner
" : "で囲まれている文字列
内部/外部指定
a : テキストオブジェクト全体を指定(a)
i : テキストオブジェクト内部を指定(inner)
vi"
kp3k3 "te|st" 2jo2jp
~~~~~
va"
kp3k3 "te|st" 2jo2jp
~~~~~~~
va" だと、" も含まれる
テキストオブジェクトの種類(よく使いそうなやつ)
キー | 意味 |
w | word . とか , とか、単語を区切りそうな文字列までの連続 set iskeyword で、区切り文字以外の文字列を確認可 |
W | WORD 非空白文字の連続 |
[,(,{,<,",` | 左の記号で囲まれている文字列 |
b | block ブロック。() 等カーソル位置から直近の囲み文字の範囲(前方一致) |
B | block ブロック。() 等カーソル位置から直近の囲み文字の範囲(後方一致) |
t | htmlタグ |
便利なテキストオブジェクト拡張プラグイン
surround.vim
tpope/vim-surround
囲み文字を対象にするテキストオブジェクト(s)を追加するプラグイン
例
ds" : 囲んでいる" を削除
cs"' : 囲んでいる" を ' に置換
ysw' : 選択範囲を " で囲む
vim-textobj-ruby
rhysd/vim-textobj-ruby
ruby のブロックを対象にするテキストオブジェクト(r)を追加するプラグイン
例
dir : if 〜 end の中身を削除