LoginSignup
150

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-02-14

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

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 の中身を削除

参考

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
150