(Win版AndroidStudioを使っている)Android開発者に贈る 俺流最高のショートカットキーカスタマイズ

# 概要

Windows版AndroidStudioを使っている全アプリ開発者に贈る、俺流最高のショートカットキーカスタマイズを紹介します。

# はじめに

Windowsのショートカットキーは貧弱過ぎる。
MacとかLinuxなら、十字キーに手を伸ばさなくても済むショートカットキーが標準で用意されているのに、なんでWindowsには無いんだ。ほんと、十字キーに手を伸ばすのが面倒。PageUpもPageDownもHomeもendもctrl+左右も何もかも面倒。はーストレス。

ん、AndroidStudioでは、ショートカットキーのカスタマイズができるのか。
でもそうは言っても特定の機能とか、ウィンドウ表示とかそういうのだけで
俺がストレスに感じているこういうのは、解決できないんでしょ。知ってる知ってる。

...え、できるの...！？まじで...！？

# AndroidStudioのショートカットキーは何でも有りなんです

まずはAndroidStudioのショートカットキーの一覧を確認しましょう。

File > Setting > KeyMap でショートカット一覧を確認できます。

![Keymap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165833/99eeb745-921b-5eb7-10c8-0889c3c41adb.png)

機能ごとにTree形式でショートカットキー一覧が表示されています。
そして右上にある検索窓(①)に知りたいショートカットを入力すれば、関連するショートカットキーがフィルタリングされて表示されます。
そしてうれしいことにショートカットキーからの逆引きもできます。虫眼鏡(②)をクリックして、ショートカットキーを入力すると、該当の項目が表示されます。

# では実際に設定してみましょう(読み飛ばし可)

例えば「left」(左)と入力してみます。

![keymap_left.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165833/acbd4e8b-58b6-e5aa-934f-853cf1add765.png)


Leftを含むショートカットキー一覧が出てきました。
カーソルの左移動は「Left」の項目をダブルクリック > 「Add Keyboard shortcut」を選択し、設定したいショートカットキーを入力すれば登録することができます。

例えば、左移動として「ctrl + B」を割り当ててみましょう。
「Add Keyboard shortcut」を選択し「ctrl + B」を入力します。

![keymap_left_input.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165833/dc45f427-955c-2ab1-612e-230c4cd44465.png)


警告が出てますね。
Win版AndroidStudioを使っている人ならほとんどの方がお気づきかと思いますが、「ctrl + B」はクラス・メソッド定義にジャンプするショートカットキーなので、「既に割り当てられてるよ」という警告が出ています。
気にせずOKをクリックすると今度は「もとの割り当てはどうする？ 消す？残す？」という警告が出ます。
今回はRemoveで消しましょう。 // あとでリセットして復活させます。

さて、これで「OK」で設定画面を閉じれば設定が反映されるはずです。
やってみてください。。。どうでしょう。「Ctrl + B」でカーソルが左に移動するでしょうか。

# とりあえずリセットしよ リセット(読み飛ばし可)

お試しで割り当てを実践してもらいましたが、まったく意に反したお試しなのでとりあえずもとに戻しましょう。
先ほどのショートカットキー一覧の画面を再度開いてください。

![リセット_windows_copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165833/c8f3692b-6cd0-cf3e-49e3-786180880441.png)


左上のKeyMapが「Windows」から「Windows copy」になっていると思います。
実は「ctrl + B」の設定を変更したときに、AndroidStudioが自動的にWindows copyを生成して、こちらの設定として「ctrl + B」をLeftに割り当ててくれています。

というわけで、こちらの「Windows copy」を「Windows」に変更して「OK」をクリックすれば設定が元に戻ります。
先ほど自動生成された「Windows copy」は削除して問題ありません。
「Windows copy」を選択した状態ですぐ右にある歯車マークをクリック > Delete を選べば削除できます。


# 一番いいショートカットキーを頼む(ここからが本題)

さて、Macと同じようにキー割り当てをするなら、先ほどの「Windows」を「Emacs」とか「macOS」とか設定すればいいのですが、AndroidStudioを使い慣れた人だと「いやいや　ctrl ＋ N はカーソル移動じゃなくてクラス検索でしょ。」ってなると思います。

__ワカル。ワカルヨ。キミノキモチ。__

標準でよく使ってるショートカットキーは残しつつ、いい感じの設定がほしい！！！！

見つけたよ。最高の設定を。
私個人観点ではありますが、ショートカットキー設定を紹介したいと思います。

### カーソル移動

|ショートカット名|割り当てショートカット|
|:--|:--|
|up    |ctrl + u|
|left  |ctrl + j|
|right |ctrl + ;|
|down  |ctrl + m|

まずはシンプルに上下左右をケアします。
左手でctrl, 右手でそれぞれ入力することで、ホームポジションを崩すことなくカーソル移動ができます。

左移動は j 、右移動は;と、進ませたいカーソル方向と合致しているので、直感的かなと思います。

|ショートカット名|割り当てショートカット|
|:--|:--|
|move caret to Previous Word |ctrl + h|
|move caret to Next Word |ctrl + :|

ctrl + ←/→ でちょっとだけ早くカーソルを動かす操作、プログラミングに限らず結構あると思うのですが、これについてもケアできます。
左がh、右が:なので、単純なカーソル移動よりも一歩左/右という具合で、こちらも直感的だと思います。

|ショートカット名|割り当てショートカット|
|:--|:--|
|page up |ctrl + alt + u|
|page down |ctrl + alt + m|

PageUp/Downについてもケアします。
上がu,下がmなので、こちらも直感的だと思います。
左右は人差し指/小指でしたが、上下操作は人差し指だけです。

PageUp/Downボタン、マスクでスクロールする生活とおさらばしましょう。

### タブ移動

|ショートカット名|割り当てショートカット|
|:--|:--|
|left tab  |ctrl + alt + j|
|right tab |ctrl + alt + ;|

デフォルトだと Alt + ←/→ ですが、とにかくホームポジション維持、十字キーを使いたくないのでこちらもケアします。

### (VCS使用時のみ)差分

|ショートカット名|割り当てショートカット|
|:--|:--|
|Previous Difference |shilft + ctrl + alt + u|
|Next Difference |shilft + ctrl + alt + m|

こちらは開発時に(Gitなどの)VCSを使っている場合のみですが、編集による差分に対してカーソルを移動させることができます。
よーし。これでだいたいケアできたな。

### カーソル移動＋選択状態

|ショートカット名|割り当てショートカット|
|:--|:--|
|up with Selection |shift + ctrl + u|
|left with Selection |shift + ctrl + j|
|right with Selection |sift + ctrl + ;|
|down with Selection |shift + ctrl + m|
|move caret to Previous Word with Selection |ctrl + h|
|move caret to Next Word with Selection |ctrl + :|

そんな馬鹿な。ただカーソル移動させるだけ？
選択しながらカーソル移動するケースだってあるでしょ。
というわけで、選択状態＋カーソル移動もケアします。

### 表示分割/移動

|ショートカット名|割り当てショートカット|
|:--|:--|
|split vertically |shift + ctrl + s|

ここからはカーソル移動ではなく、使っていて便利だった機能を(ホームポジションを極力崩さない)ショートカットキーに割り当てたものです。
これは、現在開いているEditerに対して表示を分割させるもの。

ほら、同じクラス内の実装個所を見ながら別の個所の実装するとか、あるじゃん？
でもスクロールしながら実装するとかダルイじゃん？
そんな時に、分割表示させればスクロールする手間が省けて、あーら楽ちんっ、てことです。

※他の個所を見ながら、ってそれ結合度観点でどうなんよって突っ込みは受け付けていません。

|ショートカット名|割り当てショートカット|
|:--|:--|
|go to next splitter |shift + ctrl + alt + ;|
|go to previous splitter |shift + ctrl + alt + j|

さて、上記で分割したのはいいけど、いざ分割した表示を使わなくなった時には分割先にフォーカスを移動させないと ctrl + f4 で閉じることができません。
そんな時、上記を割り当てておくことでカーソルを移動ができるようになるので、カーソル移動 → ctrl+F4 でタブを閉じる。といった具合に操作することができます。

### FileStructure

|ショートカット名|割り当てショートカット|
|:--|:--|
|File Structure |ctrl + i|

Ctrl + F12 で File Structure ウィンドウを表示できます。
そのファイル内に定義されている定数・変数・メソッド定義の一覧表示ですね。
フィルタ機能もあるウィンドウです。
が、F12って遠くね？
あなたの小指、誤タイプなしで正確にF12を狙い打つことできる？
それでミスタイプして、「はーF12遠いわー」ってストレス感じるのだったらもう近くに置けばいいじゃん。
ってことで割り当てを変更しています。

### Gradle sync 
|ショートカット名|割り当てショートカット|
|:--|:--|
|sync project with gradle file |shift + ctrl + alt + F9|

Gradleを変更したときに、エディタ上部に出てくる「Gradle変更したならsyncしてね sync」が出てくるあのsyncです。
マウスを握りたくないので、こちらもショートカットキーを割り当てました。

### clean 

|ショートカット名|割り当てショートカット|
|:--|:--|
|clean project |shift + ctrl + f9|

クリーンです。
これもショートカットキーを設定しておくと何かと役に立ちます。

## 注意

私はこれらのショートカットキーでかなり満足していますが、
実はデフォルトの設定を削除して割り当てています。
「いやいやそのショートカットキーを割り当ててる＊＊はめっちゃ使うでしょ」
という人がいたら、そのショートカットキーを削除しないように割り当てを考える必要があります。

# 最後に

マウス、十字キーとサヨナラして
快適なコーディングライフをおくろう！！！


でもAndroid Studio以外では、やっぱり十字キーと仲良くしないとね。涙。