tumblr

tumblr(タンブラー)は、メディアミックスブログサービス。ブログとミニブログ、そしてソーシャルブックマークを統合したマイクロブログサービスである。アメリカのDavidville.inc(現: Tumblr, Inc.)により2007年3月1日にサービスが開始された。

Text object selection

{motion}と{operator}を組み合わせたコマンドこそvimなんだと思っていたけど、
http://www.timedia.co.jp/karetta/article/blog/relay/023301
を読んで、これってviのカバー範囲なんだということを知って愕然とした。
で、自分でText objectというものを知って便利だなぁと感激したので覚書。

textobjectとは

text object = 特殊なmotionなので、operatorとmotionの関係が分かっていれば簡単です。詳しくは:help operatorやoperator, the true power of Vimを読むと良いです。
http://vim.g.hatena.ne.jp/ka-nacht/20090624/1245816487

そもそも{motion}は h,j,k,l や w で右隣の単語へ、b で左隣の単語へというカーソルを動かすコマンドのこと。 Text object motionsというと、センテンス単位、段落単位、関数などのブロックを囲む中括弧( { )に囲まれた部分など、なんか直感的には人間じゃないと判別できないんじゃね?みたいな範囲の移動が可能になる。ちなみに僕は割りと真面目な空気が漂う中であえて中括弧のことをおっぱい括弧と言って周りの空気をなんか変な感じにしてしまうのが好きでたまにやります。そのせいかは分かりませんが友達は少ないです。

どうすごいの?

This is a series of commands that can only be used while in Visual mode or
after an operator. The commands that start with "a" select "a"n object
including white space, the commands starting with "i" select an "inner" object
without white space, or just the white space. Thus the "inner" commands
always select less text than the "a" commands.

These commands are {not in Vi}.
These commands are not available when the |+textobjects| feature has been
disabled at compile time.
http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

dw(左隣の単語を消す)みたいにして{oparator}と{motion}を組み合わせることができるように、text object motionも{operator}の後で使うことが出来る。そのときに主に使われるのが a と i 。aはホワイトスペースを含む範囲を選択し、iはそれを含まない範囲を選択することができる。
どういう範囲を選択できるかは上のリンク見たほうが正確だし早いんだけど、いくつか自分的に素敵だとおもったものまとめ。

a" / i"

@edo_m18さんがvimのライブコーディング動画の中で「di"」でダブルクオートで囲まれた部分を消す技を披露していた。動画みたときに、これすごいけどどういう仕組みなんだろう?とずっと思っていたけど今やっと解決。

<div id="te*st">

というような文字列があって*の場所にカーソルがあった場合、「daw」で「"test"」を、「diw」で「test」という文字列を消すことが出来る。要するにダブルクオートのinnerまたはouterな文字の選択。a'/i'でシングルクオートで囲まれた部分を消す技もあるでよ。

at / it

tはtag-blockを表す。tag-blockとはHTMLやXMLの対応するタグに囲まれた部分をさす。

<div id="test">test<span id="sample">sam*ple</span>test</div>

というhtmlがあって*の部分にカーソルがあった場合、「dat」はspanタグごと消す。「dit」はspanタグの中身であるsampleという文字のみを消す。最近はHTML,CSSばかり触っているので、この機能は助かる。

a{ / i{

出たあああああああああああああ!!
おっぱい括弧!!おっぱい括弧!!!
効果!?そりゃおっぱい括弧で囲まれた部分をこれでもかってくらいに選択してくれるんですよ!!!「ci{」とかしたらおっぱい括弧で囲まれた部分を消してインサートしちゃうんですよ!!!おっぱい!!挿入!!!


これで明日から皆さんも使いたくなるはずです!おっぱい括弧という言葉が!!