Vimのテキストオブジェクトについてまとめた

  • 107
    Like
  • 0
    Comment
More than 1 year has passed since last update.

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

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)を追加するプラグイン

ys[範囲][記号] -> 記号で範囲を囲む
cs[記号] -> 記号を置換
ds[記号] -> 記号を削除
S[記号] -> 選択範囲を記号で囲む

ysiw" -> カーソル上の単語を " で囲む

vim-textobj-ruby

rhysd/vim-textobj-ruby
ruby のブロックを対象にするテキストオブジェクト(r)を追加するプラグイン

dir : if 〜 end の中身を削除

参考

  • Linked from these articles
  • Linked from Vimメモ