text-objects でショートカット

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 として、視覚的な確認を挟んでも良いだろう。