matarillo.com

The best days are ahead of us.

31日間ReSharper一周 Day 4: 自動閉じデリミタ

2012-12-30 18:17:12

元記事

31日間ReSharper一周」の4日目へようこそ。

タイプし始めるとすぐ気付く機能がある。開始デリミタを入力すると、ReSharperが終了デリミタを入力してくれるんだ。

単純な機能だけど、ちゃんとやるのはそれほど単純じゃないし、2.5から紛れ込んだバグ(その後2.5.1では修正されたけど)を除けば、ちゃんとやれている。おかしなことをすることはめったにない。

この機能は次のデリミタで動作する; { 、( 、[ 、" 、そして ’ だ。ただしジェネリクスの文法は自動補完してくれない。< は対象外なんだ。

動作サンプルは以下だ。

最初は空文。
メソッド名を入力して……
「(」を入力する。
部分式を入力して……
「(」を入力する。
おっと、「(」じゃなくて「[」だった。Backspace……
「[」を入力する。
パラメータを入力し終わったら……
「]」を入力して……
「)」を入力して……
「;」を入力する。

正しくやるべきときに正しくやってくれている。開始デリミタの直後でバックスペースを押せば、(カッコの中で何も入力してなかったなら)終了デリミタも消してくれる。しかも、カーソルが終了デリミタの直前にあるときに終了デリミタを入力しても、終了デリミタは2つにならない。この動作はセミコロンでも同様だ; カーソルがセミコロンの前にある時にセミコロンを押したって、セミコロンが2つになることはない。しょっちゅう右矢印を押したりせず、いつもどおりに入力できる。

この機能は賢いので任意のネスト内でもちゃんと動く。もし開始デリミタを入力したときに終了デリミタがすでにあるなら、終了デリミタは追加されない。当てずっぽうの時だってあるに違いないと思うんだが、気付くような間違いが起きたことなんてなかったように思う。

注意: {を入力したときには対応する}が自動的に入力される――つまり、中カッコでコードブロックを囲もうとしていたとしても、対応するデリミタはカーソル直後に入力されてしまうということ。その代わり、現在の選択範囲を中カッコで囲みたいときには「囲む」コマンドを使うといい。ショートカットはCtrl+Alt+J、8だ (Ctrl+Alt+Jでメニューがポップアップ表示されるから、8のとこは覚えなくていい)。

(追記: ReSharper開発者のIlyaが指摘してくれたんだけど、ReSharperでは、{キーの直後ではなく、Enterキーを押したときに閉じカッコを追加するようにできるから、既存コードブロックを中カッコで囲むのがやりやすくなるだろうって。Ilyaありがとう!)


31日間ReSharper一周 インデックスへ戻る