CentOS のショートカットキー

## ショートカットキー
CentOS で標準の Bash で利用できるショートカットキー（キーバインド）[^gnu] をまとめた。
[^gnu]: https://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html

## 補完

### <kbd>Tab</kbd> (complete)
コマンドやファイル名等の補完。<kbd>Ctrl</kbd> + <kbd>i</kbd> でも同様。
コマンドライン上で <kbd>Tab</kbd> キーを押下すると、テキストの補完を試みる。カーソル前の文字が `$` で始まる場合は変数を、`~` で始まる場合はユーザー名を、`@` で始まる場合はホスト名を、そしてコマンド（エイリアスと関数を含む）を順番にテキストの補完を試みる。いずれも一致しない場合、ファイル名の補完が試行される。

#### bash-completion
```bash
yum -y install bash-completion
yum -y install epel-release && yum -y install bash-completion-extras
```
コマンドごとのオプションその他の補完内容が拡充される。
`bash-completion` は標準リポジトリで、`bash-completion-extras` は EPEL リポジトリで利用できる。

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>.</kbd> (insert-last-argument)
直前のコマンドの最後の引数を補完。<kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>_</kbd> でも同様。

## コマンド履歴

### <kbd>Ctrl</kbd> + <kbd>r</kbd> (reverse-search-history)
コマンド履歴検索 (reverse-i-search)
``(reverse-i-search)`':`` と表示された後に文字を入力すると新しい履歴から順に部分一致で絞り込んでくれる。
検索文字列を入力後に再度 <kbd>Ctrl</kbd> + <kbd>r</kbd> を入力するとさらに過去の履歴が表示される。

### <kbd>Ctrl</kbd> + <kbd>s</kbd> (forward-search-history)
コマンド履歴検索 (i-search)

#### i-search の有効化
```bash
echo "stty -ixon" > /etc/profile.d/stty.sh && source /etc/profile.d/stty.sh
```
CentOS のデフォルトでは <kbd>Ctrl</kbd> + <kbd>s</kbd> には端末のロックが割り当てられており <kbd>Ctrl</kbd> + <kbd>q</kbd> を入力するまで入力を受け付けなくなるので、この割り当てを解除する必要がある。

`stty -ixon` の代わりに `stty stop undef` を実行しても同様。

### <kbd>↑</kbd>
一つ前のコマンド履歴を表示。<kbd>Ctrl</kbd> + <kbd>p</kbd> (previous-history) でも同様。

### <kbd>↓</kbd>
一つ後のコマンド履歴を表示。<kbd>Ctrl</kbd> + <kbd>n</kbd> (next-history) でも同様。

### <kbd>ESC</kbd> - <kbd><</kbd> (<kbd>Shift</kbd> + <kbd>,</kbd>)
コマンド履歴の先頭に移動。

### <kbd>ESC</kbd> - <kbd>></kbd> (<kbd>Shift</kbd> + <kbd>.</kbd>)
コマンド履歴の最後に移動。

## カーソル移動

### <kbd>Ctrl</kbd> + <kbd>a</kbd> (beginning-of-line / ^A (Start of Heading))
行頭に移動

### <kbd>Ctrl</kbd> + <kbd>e</kbd> (end-of-line)
行末に移動

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>b</kbd> (backward-word)
前の単語に移動

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>f</kbd> (forward-word)
次の単語に移動

### <kbd>Ctrl</kbd> + <kbd>]</kbd> - <kbd>(search character)</kbd> (character-search)
カーソル以降の指定文字へ移動。

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>Ctrl</kbd> + <kbd>]</kbd> - <kbd>(search character)</kbd> (character-search-backward)
カーソル以前の指定文字へ移動。

## 削除

### <kbd>Ctrl</kbd> + <kbd>w</kbd> (unix-word-rubout)
直前のスペースまで削除。

<kbd>Ctrl</kbd> + <kbd>r</kbd> や <kbd>↑</kbd> で過去のコマンドを呼び出した後に使うことでオプションを書き換えて実行することができて便利。

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>DEL</kbd> (backward-kill-word)
直前の単語を削除。<kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>Ctrl</kbd> + <kbd>h</kbd> (^H (Backspace)) でも同様。

### <kbd>Ctrl</kbd> + <kbd>[</kbd> - <kbd>d</kbd> (kill-word)
直後の単語を削除。

### <kbd>Ctrl</kbd> + <kbd>u</kbd> (unix-line-discard)
カーソル以前の文字を削除。

### <kbd>Ctrl</kbd> + <kbd>k</kbd> (kill-line)
カーソル以降の文字を削除。

### <kbd>Ctrl</kbd> + <kbd>y</kbd> (yank)
削除した文字を貼り付ける。

## その他

### <kbd>Ctrl</kbd> + <kbd>_</kbd> (undo)
元に戻す。<kbd>Ctrl</kbd> + <kbd>x</kbd> - <kbd>Ctrl</kbd> + <kbd>u</kbd> でも同様。

### <kbd>Ctrl</kbd> + <kbd>l</kbd> (clear-screen)
`clear` コマンドと同様。

### <kbd>Ctrl</kbd> + <kbd>x</kbd> - <kbd>Ctrl</kbd> + <kbd>v</kbd>
Bash のバージョンを出力。

### <kbd>Ctrl</kbd> + <kbd>c</kbd>
SIGINT シグナルを送信。

### <kbd>Ctrl</kbd> + <kbd>z</kbd>
SIGTSTP シグナルを送信。


## iTerm2 (macOS)
### <kbd>⌘</kbd> + <kbd>t</kbd>
新しいタブを開く。
### <kbd>⌘</kbd> + <kbd>d</kbd>
画面を左右に分割。
### <kbd>shift</kbd> + <kbd>⌘</kbd> + <kbd>d</kbd>
画面を上下に分割。
### <kbd>⌘</kbd> + <kbd>w</kbd>
タブまたは分割画面を閉じる。
### <kbd>⌘</kbd> + <kbd>→</kbd> / <kbd>←</kbd>
タブの移動。
### <kbd>option</kbd> + <kbd>⌘</kbd> + <kbd>→</kbd> / <kbd>←</kbd> / <kbd>↑</kbd> / <kbd>↓</kbd>
分割画面の移動。
### <kbd>shift</kbd> + <kbd>⌘</kbd> + <kbd>e</kbd>
タイムスタンプを表示。
### <kbd>option</kbd> + <kbd>⌘</kbd> + <kbd>;</kbd>
カーソルガイドを表示。（カーソルのある行を反転する）