irohiroki's blog 2

Web apps and Geekies

おれとさぶらいむてきすとの置換

このエントリはおれのさぶらいむてきすと Advent Calendar 2013の9日目です。昨日は@jugyoさんのおれのさぶらいむてきすとのカラースキーマでした。

今日はSublime Textにおける置換について考えてみます。

普通の置換

ご存知の通り、置換というのはドキュメントの中の特定の文字列を全て一度に新しい文字列で置き換える編集操作です。これができないテキストエディタというのは聞いたことがなくて、もちろんSublime Textでも opt + cmd + f で置換フォームが表示されます。

replace form

さらにSublime Textでは、検索する文字列を正規表現で書いたり、大文字と小文字を区別するか選べたりします。ですが、Sublime Textの真価はそこではありません。

複数カーソル

Sublime Textと言えばこれです。カーソルが分身して、それぞれの場所で同一の編集をしてくれる機能です。つまり、2箇所に書かれてる「regist」にそれぞれカーソルを置いて、「register」に書き換えたりできるわけです。

一度これを人に説明したら、「それ置換でいいよね?」と言われました。確かに簡単な例だと置換でいいんですが、もっと複雑なこともあります。

惚れさせ517 「君たち」 若いね 若いね 若いねー

置換より複数カーソルが優れているのは 編集の過程を見ながら入力できる ところです。例えば、

1
2
foo(a + b);
foo(c + d);

1
2
bar(a, b);
bar(c, d);

に直すとしたら、どうしますか?置換したいところと残したいところが混ざってて、考えるのが面倒な例です。

2行ぐらいだったら素朴に1つずつ手作業で編集する人が多いかもしれません。でも、20行だったらどうですか?200行だったら?

Vimなら :%s/foo.\(.\)...\(.\)/bar(\1, \2/ と打てば実現できますが、これを打つのも考えるのも面倒です。たぶん1度ぐらい間違えてやり直すのではないでしょうか。Emacsは使い込んだことがないので分かりません。

Sublime Textならこんな感じ。

multiple selection demo

最初に ctrl + cmd + g という、カーソル下の単語を全て選択するショーカットを使っています。その後は「bar」に書き換えてカーソル移動して「 +」を「,」に直してるだけですね。

このようにSublime Textでは複数のカーソルを使うことでインタラクティブに置換操作をできます。2回に分けて置換したり、正規表現を考えたりする必要がないわけです。便利ですね!!!

複数の選択範囲を作る方法は ctrl + cmd + g 以外にもあるので、また別の日に紹介したいと思います。明日は@s12btさんです。よろしくお願いします!