矢印キー上下の代わりにcontrol + nとcontrol + pを激推ししたい話

# はじめにの前に
12/4追記
[からくりアドベントカレンダー](https://qiita.com/advent-calendar/2019/caraquri)の4日目にこの記事で参加することとなりました。
僕もエンジニアですが、技術的なことは他の方に任せるとして、技術的ではないけれどプログラミング作業に関わる大事なことを語ろうと思います。よろしくどうぞ。

参加にあたりちょっと加筆しています。


# はじめに
突然ですが、
### **macbookの矢印キーの上下、すっごく押しにくくないですか??**
左右は他のキーと同じサイズだから許す。ただし上下キー、テメーはダメだ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/fa4a41cd-75bc-956a-15ca-4bc71bea1117.jpeg" width=50%>

場所が遠い。小さい。すこぶる小さい。なんでCAPSキーよりも小さいの。[^1]
今使っているmacの前はwindowsを使っていたので、「下キーは左右キーの間、上キーはその上」のつもりでタイピングしてしまい頻繁に打ち間違えます。下キー押そうとすると50%の確率で上キー押します。上キー押そうとすると50%の確率でshiftキーを押します。
しかもこのタイプミスがなかなか治らない。

ということで...

# `control+n` と `control+p`を使いましょう
今回伝えたいのはこれだけです。tldrです。
長い文章を読みたくない人はこれだけ頭に入れてブラウザバックしてもいいくらいです :upside_down: 
以下`control+n`を`^n`、`control+p`を`^p`と表記します。

## 効果
- 「カーソルを上下に動かす」操作のために手をホームポジションから動かさずに済む  
-> 文字を打つ流れのままカーソル移動ができる  
-> コーディングなどの作業が圧倒的に早くなる :muscle: 

## 副作用
- タイプ数が増えます  -> (個人的には)あんまり気になりません。
- 慣れるまで少し効率が落ちます -> 頑張って慣れましょう。慣れたら楽になること請け合いです。

## `^n`、`^p`が使える場所

矢印キー上下でできる操作の大多数が`^n`と`^p`でできます。タイプ数は増えるけど、右手をホームポジションからキーボードの右下に持っていくより圧倒的に楽。

- chromeの検索候補の上下移動
     `tab`,`shift+tab`でも同様のことができます。どっちでも上下キーより楽。  
![c-np_in_brouser.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/9b3e1327-c472-33a8-d4f6-9014d0e05ac8.gif)

- XcodeなどなんかしらのIDE
    エディタはもちろん、候補の変更も`^n`,`^p`で。 (Xcode以外のエディタはあまり検証してません)
![0gl03-5yf0t.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/fd7f95d6-7cba-1198-7777-02f6cb1d632d.gif)



- ターミナル
    コマンドの履歴を行ったり来たり。
![xscd1-1rl92.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/721a3d23-039d-807a-b71a-d58674e2747e.gif)

# まとめ
もうまとめです。
こういう話を知っている人ってエンジニアの中でどれくらいいるんだろう、実はエンジニアの中じゃ常識だったらひたすら内容薄い記事になるなぁと不安になりながら書きました :innocent: 
でも私は^nと^p使うようになってからエンジニアとしてのQOLが爆上がりしたので、みなさんも^nと^pを使って素晴らしいキーバインド生活をお送りください。

# おまけ - キーボードビューア
この記事で出てきている↓これ、キーボードビューアと言います。
<img width="812" alt="スクリーンショット 2019-12-04 0.47.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/2dfe834d-84ce-af6b-f8d1-83fc0ebf866c.png">
反応したキーが可視化されるので、キーボードの調子がおかしい時に開いて動作確認してみましょう。 [^2]

画面右上の`あ`をクリック > `キーボードビューアを表示`から出せます。
<img width="347" alt="スクリーンショット 2019-12-03 11.39.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/dfe5405f-5b44-9b50-dfaa-81a34bdbb479.png">


# おまけ - ^nと^p以外の^(1文字)キーも一緒に激推ししたい話
キーバインドを覚えるのが ~~コーディングより~~ 好きで、定期的にキーバインドを覚えるようにしています。
コマンドは英単語と一緒に覚えると吉です。

|キー|効果|覚え方|
|:--:|:--:|:--:|
|^n|次の行へ移動(下キーのような動作)|**N**ext|
|^p|前の行へ移動(上キーのような動作)|**P**rveious|
|^f|1文字右(前方)へ移動(右キーと同じ)|**F**orward|
|^b|1文字左(後方)へ移動(左キーと同じ)|**B**ackward|
|^a|行の先頭へ移動|line he **A** d|
|^e|行末尾へ移動|line **E**nd|
|^d|カーソルの右の文字を削除|**D**elete|
|^h|カーソルの左の文字を削除(deleteキーと同じ)||
|^k|カーソルから行末までの文字全て削除|**K**ill line|
|^w|直前の1単語を削除(ターミナルのみ、alt+deleteと同じ)|**W**ord rebout(すり潰す)|
|^u|カーソルから行頭までの文字を削除(ターミナルのみ、⌘+deleteと同じ)|c **U** t [^3]|
|^y|^kや^wで削除した文字列を貼り付け|**Y**ank|
|^t|カーソルの左右にある文字を入れ替え|**T**ranspose|
|^l|カーソル位置を画面の中心にする(一部アプリ) or 画面の文字をクリアする(ターミナルのみ)|c **L** ear screen|
|^k|(文字入力中に)全てカタカナに変換||
|^j|(文字入力中に)全てひらがなに変換||
|^l|(文字入力中に)全て全角英数字に変換||
|^;|(文字入力中に)全て半角英数字に変換||

# おまけ - ブラウザでもcontrolキーのショートカットを激推ししたい話

エンジニア稼業と切っても切れないのがネットでの調べ物。
ブラウザでもショートカットを多用すると~~ネットサーフィン~~調べ物も捗るというものです。
[chromeのショートカット一覧](https://support.google.com/chrome/answer/157179?hl=ja)

よく使うのは、新しいタブを開く、閉じる、間違えて閉じたタブを再度開く(⌘t、⌘w、⌘T)、検索欄にフォーカスする(⌘l)、特定のタブに切り替える(⌘1~8、⌘9)などあります

でも私が他の方があまり使っていないけど激推ししたいのは`control+tab`です。
効果は`隣のタブに移動する`だけです。でもGUIでタブをクリックして切り替えるより圧倒的に楽です。

![tab_change](https://media.giphy.com/media/RlOGOk7w1lPSpLB0vJ/giphy.gif)


# おまけ - emacsキーバインドを確認する
```bash
$ bind -p

"\C-g": abort
"\C-x\C-g": abort
"\e\C-g": abort
"\C-j": accept-line
"\C-m": accept-line
# alias-expand-line (not bound)
# arrow-key-prefix (not bound)
# backward-byte (not bound)
"\C-b": backward-char
"\eOD": backward-char
"\e[D": backward-char
"\C-h": backward-delete-char
"\C-?": backward-delete-char
"\C-x\C-?": backward-kill-line
"\e\C-h": backward-kill-word
"\e\C-?": backward-kill-word
"\eb": backward-word
"\e<": beginning-of-history
"\C-a": beginning-of-line
"\eOH": beginning-of-line
...
```

`bash -p`でものすごい量のemacsキーバインドが出てきます。[^4]mac OSのキーバインドはemacsが基になっているものも多いので、見ると勉強になるかもしれません。

[^1]: [wikipedia](https://ja.wikipedia.org/wiki/CapsLock%E3%82%AD%E3%83%BC#%E7%8F%BE%E4%BB%A3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%AD%98%E5%9C%A8%E6%84%8F%E7%BE%A9)でも存在意義が疑われているcapsキー、FORTRAN書く人くらいしか困らなさそう。偏見ですが。

[^2]: MacBookのバタフライキーボードは[Appleでも無償の修理に対応している](https://support.apple.com/ja-jp/keyboard-service-program-for-mac-notebooks)くらい壊れやすく、打鍵の調子がおかしい時はキーボードビューアを見て正しく反応しているのか調べてみるのも手です。

[^3]: bashでは行頭 ~ カーソルまで削除、zshでは行全体を削除するらしいです。私はbash教徒の⌘+delete派なので^uはほぼ使わないです
[^4]: emacsのものすごい量のキーバインドは修飾キーが7つある[スペースカデットキーボード](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%AB%E3%83%87%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89#cite_note-isbn1-56592-152-6-5)の影響を受けており、写真を見るとこの記事くらいの量のキーバインドなら覚えてもいいかな...というお気持ちになります