自動インデントに任せて行を割りまくったけどやっぱり元に戻したいとき便利なショートカット

PhpStorm (IntelliJ IDEA系全般) の `Ctrl+Shift+J` (Mac) の話です。

エディタの自動インデント機能、改行一発でコードが整って便利ですよね。

![return0.png](https://qiita-image-store.s3.amazonaws.com/0/11525/564d913a-bc1a-ec07-d770-b8f98fc05a96.png)

![return1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/b9f32778-0c31-3af2-8fb7-22d1b66fb9c3.png)

![return2.png](https://qiita-image-store.s3.amazonaws.com/0/11525/356f8ffc-d220-1437-aab8-b543e7e6094c.png)

![return3.png](https://qiita-image-store.s3.amazonaws.com/0/11525/d875f69e-c484-2738-bea8-3c33bd7659da.png)

ただ... 改行じゃんじゃん入れて整形してる最中は気持ちいいんですが、うまいこと名前短くするリファクタがキマったりして、やっぱりここは同じ行にまとめたスタイルに戻したい、ってなることもあります。

IntelliJ系のバックスペースは賢くて、まさにこれの逆順で、勝手にインデント取っ払ってもとに戻る感じです。すばらしい。

![return2.png](https://qiita-image-store.s3.amazonaws.com/0/11525/356f8ffc-d220-1437-aab8-b543e7e6094c.png)

`delete` キーだけで

![return1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/b9f32778-0c31-3af2-8fb7-22d1b66fb9c3.png)

- - -

でもね、でもね... あっち行ってバックスペース、こっちいってバックスペース... と、ちまちまカーソルを動かすのがつらい。しょうもないかもしれませんが、この程度のことが面倒くさいと思うのがプログラマーなんですよね。

そんなときはこれ:

[IntelliJ IDEA 2016.2 Help :: Joining Lines and Literals](https://www.jetbrains.com/help/idea/2016.2/joining-lines-and-literals.html)
[PhpStorm 2016.2 Help :: Joining Lines and Literals](https://www.jetbrains.com/help/phpstorm/2016.2/joining-lines-and-literals.html)

こうして

![sel-j-0.png](https://qiita-image-store.s3.amazonaws.com/0/11525/930e7593-38d3-53e2-e1dc-2bf6ff9f5955.png)

`Ctrl+Shift+J`

![sel-j-1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/1d6fab26-5e60-ba22-4f51-91294491d59e.png)

じゃーん

こういうふうにしても

![sel-j2-0.png](https://qiita-image-store.s3.amazonaws.com/0/11525/355abfc8-c5fb-979f-9473-c0a4ca50a6ce.png)

`Ctrl+Shift+J`

![sel-j2-1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/e8eae63a-6346-3749-3756-e5ab64a81b53.png)

じゃーん

こういうのも

![sql0.png](https://qiita-image-store.s3.amazonaws.com/0/11525/e0d346e7-451d-54d5-ecef-79f1e2890d9a.png)

`Ctrl+Shift+J`

![sql1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/1e538c75-d710-2f8d-21d2-5141de87ff3f.png)

このとおり。

あ、ちなみにバックスペースだとこのありさま... 文字列は構文じゃないので賢いバックスペースでもだめですね。

![sqlbs.png](https://qiita-image-store.s3.amazonaws.com/0/11525/f92ece75-428d-5ddf-f2c4-0e20e757cc37.png)

- - -

さーて、ほんとにやりたいのはここからですよ。

まとめてどーんと結合じゃなくて、どこを結合したいかを丁寧に考えたいとき、ありますよね。範囲選択せずに使うのがこいつの本来の機能です。

この行は次の行と合体したいなーと思う行にカーソルがいる状態で、

![j0.png](https://qiita-image-store.s3.amazonaws.com/0/11525/cfe582ee-1be1-d309-d3dd-727bc5229b57.png)

`Ctrl+Shift+J` 合体

![j1.png](https://qiita-image-store.s3.amazonaws.com/0/11525/a9cfba62-eeaf-87e8-964e-045f16fa071a.png)

そのままカーソル移動操作せず、さらに連打

![j2.png](https://qiita-image-store.s3.amazonaws.com/0/11525/a219fb1a-d4d4-6230-98c1-d3fb100fbf33.png)

閉じカッコのほうも合体 (ここはバックスペースでもいいけど)

![j3.png](https://qiita-image-store.s3.amazonaws.com/0/11525/101e78d8-0121-6f84-2c8c-274f24d0271b.png)

選択範囲を `Alt+↑` の連打で (構文構造的にきっちり) 広げて

![j4.png](https://qiita-image-store.s3.amazonaws.com/0/11525/f1cb7941-d41c-1620-715f-476f853644b5.png)

いじったとこだけ Reformat Code (`Cmd+Alt+L`)

![j5.png](https://qiita-image-store.s3.amazonaws.com/0/11525/d43f2496-bb66-cb4f-be86-53d08925f26e.png)

こういうカッコがネストしたコードの整形、PHPでは (もしかしたらJSのほうが...まあどっちにしろそのへんのWeb開発で) よくある操作パターンだと思います。カーソル移動ちまちまやっててイラッと来たときにどうぞ。