【Linux】Ctrlショートカットキー 　由来まとめ


ターミナルや Bash でよく使われる `Ctrl + F` や `Ctrl + B` などのキーボードショートカットは、Emacs 由来とよく言われます。しかし、実は **ASCII 制御文字の歴史的背景** も密接に関わっています。本記事では、代表的なショートカットの由来をまとめました。ちょっとした雑学にもなりますので、ぜひ参考にしてみてください。



## Ctrl + F, B, A, E の由来

### Ctrl + F（Forward → 1文字前進）

#### **由来①：ASCII 制御文字**
- `Ctrl + F` は ASCII コード **0x06（ACK: Acknowledgment）** に対応。
- ただし、ASCII の制御文字としての意味よりも、**Emacs の影響** が大きい。

#### **由来②：Emacs の影響**
- `F` は **Forward（前進）** の頭文字。
- Emacs では `Ctrl + F` が「カーソルを1文字右に移動」する機能として定着。
- Bash などのターミナルも Emacs キーバインドを採用しているため、同様に「1文字右に移動」する。

> **結論**：`F` は「Forward（前へ）」の意味。

---

### Ctrl + B（Backward → 1文字後退）

#### **由来①：ASCII 制御文字**
- `Ctrl + B` は ASCII コード **0x02（STX: Start of Text）** に対応。
- しかし、こちらも実際には **Emacs 由来** で定着。

#### **由来②：Emacs の影響**
- `B` は **Backward（後退）** の頭文字。
- Emacs では `Ctrl + B` が「カーソルを1文字左に移動」する機能。
- Bash でも同様に「カーソルを1文字左へ移動」。

> **結論**：`B` は「Backward（後ろへ）」の意味。

---

### Ctrl + A（行の先頭へ移動）

#### **由来①：ASCII 制御文字**
- `Ctrl + A` は ASCII コード **0x01（SOH: Start of Heading）** に対応。
- 「先頭」を表す制御文字が由来となり、行の先頭へ移動するコマンドとして利用。

#### **由来②：Emacs の影響**
- `A` 自体に特別な意味はないが、Emacs では `Ctrl + A` が「行の先頭へ移動」。
- Bash も Emacs のキーバインドを引き継いでいる。

> **結論**：`A` には直接的な意味はないが、ASCII 由来の `0x01（Start of Heading）` が背景。

---

### Ctrl + E（行の末尾へ移動）

#### **由来①：ASCII 制御文字**
- `Ctrl + E` は ASCII コード **0x05（ENQ: Enquiry）** に対応。
- 「問い合わせ」の意味だが、「行末」移動とは無関係。

#### **由来②：Emacs の影響**
- `E` は **End（末尾）** の頭文字。
- Emacs では `Ctrl + E` が「行の末尾へ移動」する機能。
- Bash でも Emacs 同様に「行末へ移動」。

> **結論**：`E` は「End（末尾）」の意味。

---

#### **Ctrl + F, B, A, E まとめ**

| ショートカット | ASCII コード         | Emacs の影響                                |
|:--------------:|:---------------------:|:-------------------------------------------:|
| **Ctrl + F**   | 0x06（ACK）          | **Forward（前進） → 1文字右へ移動**         |
| **Ctrl + B**   | 0x02（STX）          | **Backward（後退） → 1文字左へ移動**        |
| **Ctrl + A**   | 0x01（SOH）          | **行の先頭へ移動**                          |
| **Ctrl + E**   | 0x05（ENQ）          | **End（末尾） → 行の末尾へ移動**            |

> **ポイント**  
> - `F, B, E` は Emacs の命名（Forward, Backward, End）が由来。  
> - `A` だけは ASCII 制御文字の「先頭」意味が強く影響している。  



## Ctrl + H, D, W, U, K, Y の由来

### Ctrl + H（Backspace / 1文字削除）

#### **由来①：ASCII 制御文字**
- `Ctrl + H` は ASCII コード **0x08（BS: Backspace）** に対応。
- 昔のコンピュータでは `Ctrl + H` を押すとカーソルが1文字分左に戻った（Backspace）。

#### **由来②：Emacs の影響**
- `H` は削除（Backspace）の頭文字ではないが、ASCII 由来でそのまま使用。
- Emacs では `Ctrl + H` はヘルプ（Help）用のキーバインドとしても使われるが、ターミナル上では「1文字削除」として動作する場合が多い。

> **結論**：`H` 自体に削除の意味はないが、ASCII コード `0x08`（BS）からそのまま受け継がれた。

---

### Ctrl + D（EOF / 文字削除または終了）

#### **由来①：ASCII 制御文字**
- `Ctrl + D` は ASCII コード **0x04（EOT: End of Transmission）** に対応。
- 通信の終わりを示す制御文字。

#### **由来②：Emacs の影響**
- `D` は **Delete（削除）** の頭文字。
- Emacs では `Ctrl + D` は「カーソル上の文字を削除」。
- Bash では **カーソルの文字削除** に加え、入力が空のときに `Ctrl + D` を押すと **EOF（シェル終了）** となる。

> **結論**：`D` は「Delete（削除）」の意味を持ち、ASCII の `0x04`（EOT）にも対応。

---

### Ctrl + W（単語単位で削除）

#### **由来①：ASCII 制御文字**
- `Ctrl + W` は ASCII コード **0x17（ETB: End of Transmission Block）** に対応。
- ブロックの終わりを意味するが、削除機能との直接的な関係は薄い。

#### **由来②：Emacs の影響**
- `W` は **Word（単語）** の頭文字。
- Emacs では `Ctrl + W` は選択範囲を削除（Cut）する機能（Vi でいう "delete word" ではない点に注意）。
- Bash では「直前の単語を削除」する機能として実装されている。

> **結論**：`W` は「Word（単語）」を意味し、単語単位の削除につながる。

---

### Ctrl + U（行全体を削除）

#### **由来①：ASCII 制御文字**
- `Ctrl + U` は ASCII コード **0x15（NAK: Negative Acknowledge）** に対応。
- エラーを示す制御文字だが、削除とは関係なし。

#### **由来②：Emacs の影響**
- `U` は一見 **Undo** に見えるが、実は **「行全体（またはカーソル左側）を削除」** の機能として使われる。
- Emacs や Bash ではカーソルの左側、または行全体を削除する役割。

> **結論**：`U` は削除と無関係な文字だが、Emacs で「行削除」として定着。

---

### Ctrl + K（カーソル以降を削除）

#### **由来①：ASCII 制御文字**
- `Ctrl + K` は ASCII コード **0x0B（VT: Vertical Tab）** に対応。
- 縦方向のタブを意味し、削除とは結びつかない。

#### **由来②：Emacs の影響**
- `K` は **Kill（削除）** の頭文字。
- Emacs では「カーソル位置から行末までを削除」する機能。
- Bash でもこの動作を引き継いでいる。

> **結論**：`K` は「Kill（削除）」を意味する Emacs 由来。

---

### Ctrl + Y（削除したテキストを貼り付け）

#### **由来①：ASCII 制御文字**
- `Ctrl + Y` は ASCII コード **0x19（EM: End of Medium）** に対応。
- ストレージメディアの終わりを示す制御文字。貼り付けとは無関係。

#### **由来②：Emacs の影響**
- `Y` は **Yank（引っ張る）** の頭文字。
- Emacs では直前に削除（Kill）したテキストを **Yank（貼り付け）** する機能を `Ctrl + Y` に割り当て。
- Bash でも `Ctrl + K` などで削除した内容を `Ctrl + Y` で貼り付け可能。

> **結論**：`Y` は「Yank（貼り付け）」を意味し、Emacs の影響が大きい。

---

#### **Ctrl + H, D, W, U, K, Y まとめ**

| ショートカット | ASCII コード         | Emacs の影響                                            |
|:--------------:|:---------------------:|:-------------------------------------------------------:|
| **Ctrl + H**   | 0x08（BS）           | **Backspace（1文字削除）**                              |
| **Ctrl + D**   | 0x04（EOT）          | **Delete（カーソル上の文字削除 or シェル終了）**         |
| **Ctrl + W**   | 0x17（ETB）          | **Word（単語削除）**                                     |
| **Ctrl + U**   | 0x15（NAK）          | **行全体（または左側）を削除**                           |
| **Ctrl + K**   | 0x0B（VT）           | **Kill（カーソル以降を削除）**                           |
| **Ctrl + Y**   | 0x19（EM）           | **Yank（削除したテキストを貼り付け）**                  |

> **ポイント**  
> - `K（Kill）`, `Y（Yank）`, `W（Word）` は意味がハッキリしている。  
> - `H（Backspace）`, `D（Delete）`, `U（行削除）` は ASCII 制御文字の歴史と Emacs の機能が複雑に絡んで決まった。  



## おわりに

ここで紹介したショートカットは、**ASCII 制御文字** と **Emacs** 両方の歴史が入り混じって生まれています。特に Emacs 由来のキーは、その頭文字がそのまま機能名を表しているため覚えやすいですが、一部では ASCII コードの意味が先行して機能に結びついたケースもあります。

ターミナルを触る機会が多い方は、これらのショートカットの背景を理解すると「なぜこのキーなんだろう？」というモヤモヤが晴れて、少し作業が楽しくなるかもしれません。ぜひコマンドラインを快適に使いこなすための知識として役立ててみてください。