Development Environment Conference 以降、個人的に活躍しているのが text-objects だ。ビジュアルモードとカーソル移動で行っていた作業が大幅に楽になった。詳しくは、:he text-objects。または、オライリーの「入門 vi」170p に解説がある。
では、覚えたてのイディオムを幾つか紹介しよう。
コードを整形する vip=
ビジュアルモードにして、整形したいブロックを選択して = キーを押す一連の動作のショートカットとなるのが、vip= コマンドである。翻訳すると、Visual Innner Paragraph =(formatting command)。下記のようなレイアウトが崩れているコードの、任意の位置にカーソルを移動し、vip= と入力する。
function hoge() { var foo = "foo"; for (var i = 0; i < 10; i++) { document.write(foo); } }
結果、正しく美しくインデントされる。
function hoge() { var foo = "foo"; for (var i = 0; i < 10; i++) { document.write(foo); } }
括弧の中身を削除する dib
主に関数の引数を削除するためにこのコマンドを使用している。以下のコードの、引数の任意の位置に移動し、dib と入力する。dib は Delete Inner Block の略だ。
function hoge(foo, bar, baz, piyo, paya, monkey, john, blah) { //何らかのコード }
結果、多すぎる引数が跡形もなく削除される。
function hoge() { //何らかのコード }
中括弧の中身を削除する diB
関数を書き直す決断を下すのが、このコマンド。中括弧 {} の中身をごっそり消すことができる。先ほどの例と異なり、3 文字目の B が大文字ならば、中括弧が対象となる。
function hoge() { //残念ながら //不要となる //コード }
diB そして……。
function hoge() { }
今のところ、使うのはこれくらいだろうか。text-objects は、文法を覚えてしまえば応用が幾らでも効く。
text-objects を使うための基本文法
オペレータ(v|y|d) フラグ(a|i) 対象(p|b|B)
オペレータ部分に = を持ってくれば、冒頭の vip= は =ip にショートカットが可能だ。delete 系は、ビジュアルモードからの実行、つまり dib ではなく vibd として、視覚的な確認を挟んでも良いだろう。