Turbo Pascal 3.0 のキーボードショートカット

# はじめに

Turbo Pascal 3.0 で使えるキーボードショートカットを調べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/3279c8a6-a63f-8ab4-b7f7-2d480cf01351.png)

# キーボードショートカット

この記事のキーボードショートカットは Turbo Pascal のマニュアルを参考にしています。

## クイックリファレンス

基本的なキーボードショートカットです。`〔Ctrl〕+〔K〕〔D〕` だけ覚えていればなんとかなると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f0bbd548-8c5d-f906-bdb6-07f4c1bf6859.png)

~~この図は何かの付録 (?) を描き直したものなのですが、元ネタが思い出せません。~~ Turbo Pascal 3.0 (CP/M) のマニュアルでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d1cc63e3-022c-7944-af0a-48476cb6f476.png)

 - [TURBO Pascal Reference Manual (CP/M Version 3) (Internet Archive)](https://archive.org/details/bitsavers_borlandturReferenceManualCPMVersion3Dec88_6578073/page/n245/mode/2up)

## キーボードショートカット詳細

### 基本カーソル移動コマンド

| TINST | ショートカット | 説明 |
|:---:|:---|:---|
| 1, 2 |〔Ctrl〕+〔S〕| 1 文字左へ移動〔←〕 |
| 3 |〔Ctrl〕+〔D〕| 1 文字右へ移動〔→〕 |
| 4 |〔Ctrl〕+〔A〕| 1 ワード左へ移動 |
| 5 |〔Ctrl〕+〔F〕| 1 ワード右へ移動 |
| 6 |〔Ctrl〕+〔E〕| 1 行上へ移動〔↑〕 |
| 7 |〔Ctrl〕+〔X〕| 1 行下へ移動〔↓〕 |
| 8 |〔Ctrl〕+〔W〕| 1 行上へスクロール |
| 9 |〔Ctrl〕+〔Z〕| 1 行下へスクロール |
| 10 |〔Ctrl〕+〔R〕| 1 ページ上へ移動〔Page Up〕|
| 11 |〔Ctrl〕+〔C〕| 1 ページ下へ移動〔Page Down〕 |

### 拡張カーソル移動コマンド

| TINST | ショートカット | 説明 |
|:---:|:---|:---|
| 12 |〔Ctrl〕+〔Q〕〔S〕| 行頭へ移動〔Home〕|
| 13 |〔Ctrl〕+〔Q〕〔D〕| 行末へ移動〔End〕|
| 14 |〔Ctrl〕+〔Q〕〔E〕| ページ先頭へ移動  |
| 15 |〔Ctrl〕+〔Q〕〔X〕| ページ末尾へ移動  |
| 16 |〔Ctrl〕+〔Q〕〔R〕| ファイル先頭へ移動  |
| 17 |〔Ctrl〕+〔Q〕〔C〕| ファイル末尾へ移動  |
| 18 |〔Ctrl〕+〔Q〕〔B〕| ブロック先頭へ移動  |
| 19 |〔Ctrl〕+〔Q〕〔K〕| ブロック末尾へ移動  |
| 20 |〔Ctrl〕+〔Q〕〔P〕| 直前のカーソル位置へ移動 (検索/検索置換の移動後に使う)|

### 挿入/削除コマンド

| TINST | ショートカット | 説明 |
|:---:|:---|:---|
| 21 |〔Ctrl〕+〔V〕| 挿入/上書モードの切り替え〔Insert〕 |
| 22 |〔Ctrl〕+〔N〕| 1 行挿入 |
| 23 |〔Ctrl〕+〔Y〕| 1 行削除 |
| 24 |〔Ctrl〕+〔Q〕〔Y〕| 行末まで削除 |
| 25 |〔Ctrl〕+〔T〕| カーソル右の 1 ワードを削除 |
| 26 |〔Ctrl〕+〔G〕| カーソル位置文字を削除〔Delete〕|
| 27, 28 |〔Delete〕| カーソル左の文字を削除〔Backspace〕|

### ブロックコマンド

| TINST | ショートカット | 説明 |
|:---:|:---|:---|
| 29 |〔Ctrl〕+〔K〕〔B〕| ブロック選択開始 |
| 30 |〔Ctrl〕+〔K〕〔K〕| ブロック選択終了 |
| 31 |〔Ctrl〕+〔K〕〔T〕| 1 ワード選択 |
| 32 |〔Ctrl〕+〔K〕〔H〕| 選択領域の表示/非表示 |
| 33 |〔Ctrl〕+〔K〕〔C〕| 選択領域を貼り付け (コピー) [^1]|
| 34 |〔Ctrl〕+〔K〕〔V〕| 選択領域を貼り付け (移動) [^1]|
| 35 |〔Ctrl〕+〔K〕〔Y〕| 選択領域を削除 |
| 36 |〔Ctrl〕+〔K〕〔R〕| カーソル位置にファイルを読み込む |
| 37 |〔Ctrl〕+〔K〕〔W〕| 選択領域をファイルに保存 |

:::note
ハイライト色の使えない環境だと判りにくいのですが、ブロック選択は矩形でも行でもなく文字単位です。行単位の選択を行いたいのであれば、事前に行頭へ移動 (`〔Ctrl〕+〔Q〕〔S〕`) する必要があります。
:::

### その他コマンド

| TINST | ショートカット | 説明 |
|:---:|:---|:---|
| 38 |〔Ctrl〕+〔K〕〔D〕| エディタを終了 |
| 39 |〔Ctrl〕+〔I〕/ 〔TAB〕| タブ |
| 40 |〔Ctrl〕+〔Q〕〔I〕| オートインデントのオン/オフ  |
| 41 |〔Ctrl〕+〔Q〕〔L〕| 行の回復  |
| 42 |〔Ctrl〕+〔Q〕〔F〕| 検索 |
| 43 |〔Ctrl〕+〔Q〕〔A〕| 検索置換 |
| 44 |〔Ctrl〕+〔L〕| 直前の検索の繰り返し |
| 45 |〔Ctrl〕+〔P〕| 制御文字の入力 (検索/検索置換で使う)|
| - |〔Ctrl〕+〔U〕| 操作の中止 (コマンドが入力を求めている場合)|

#### 検索オプション

検索文字には次の制御文字が使えます。

| 制御文字 | 表示 |説明 |
|:---|:---:|:---|
|〔Ctrl〕+〔A〕| ^A | ワイルドカード |
|〔Ctrl〕+〔M〕| ^M | 復帰 (CR) |
|〔Ctrl〕+〔J〕| ^J | 改行 (LF) |

制御文字を入力するには`〔Ctrl〕+〔P〕` を使います。例えば `^A` を入力したい場合には `〔Ctrl〕+〔P〕〔A〕` とタイプします。

検索オプションは次の通りです。検索オプションは組み合わせて指定することが可能です。

| オプション | 説明 |
|:---:|:---|
| B | 逆方向へ検索します |
| G | ファイル先頭から検索します |
| n | n 番目にみつかった文字列に移動します |
| U | 大文字/小文字を区別しません |
| W | 単語単位での検索 |

#### 検索置換オプション

検索文字や置換文字には制御文字が使えますが、置換文字における〔Ctrl〕+〔A〕は意味を持ちません。
検索置換オプションは次の通りです。検索置換オプションは組み合わせて指定することが可能です。

| オプション | 説明 |
|:---:|:---|
| B | 逆方向へ検索します |
| G | ファイル先頭から検索します |
| N | 問い合わせを行わずに置換します |
| n | n 個のみつかった文字列を置換します |
| L | 選択領域内だけで置換します |
| U | 大文字/小文字を区別しません |
| W | 単語単位での検索 |

## TINST

キーボードショートカットは TINST.COM で変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b6fcff32-d0bd-a9e3-f268-e39a85f457b5.png)

〔C〕キーを押してショートカットを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/93c2af39-3dc8-5a51-8698-36c544e2a27d.png)

### TINST での操作方法

 - 設定したい項目は `そのキー (ショートカット)` を押し〔Enter〕で確定。
 - 設定をスキップしたい項目はそのまま〔Enter〕を押す。
 - 設定を初期化するには〔-〕キーを押す。
 - 一つ前の設定に戻るには〔B〕キー (〔Shift〕+〔B〕)を押す。
 - 設定を途中で抜けるには〔Q〕キー (〔Shift〕+〔Q〕)を押す。
 - 押したキーと表示されるキーコードは異なる事があります。
 - 上記設定を行ってもダイアモンドカーソルは有効です。

## 個別の設定
### ・MS-DOS (PC-9801) 用の設定
MS-DOS (PC-9801) 用の設定です。事前に `KEY.EXE` でカーソルキーの割り当てを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b72cc863-3895-591a-af57-6361f9b88f70.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9e146cc4-b0a8-b3f2-09a8-0315ebf1fc04.png)

| 機能 | キー | 変更前 | 変更後 |
|:---|:---|:---|:---|
| F03 | INS | \<ESC\>P | \<ESC\>R  |
| F04 | DEL | \<ESC\>D | \<ESC\>S  |
| F05 | UP | \<VT\> | \<ESC\>H  |
| F06 | \<--  | \<BS\> | \<ESC\>K  |
| F07 | --\>  | \<FF\> | \<ESC\>M  |
| F08 | DOWN  | \<LF\> | \<ESC\>P  |

:::note
KEY.TBL がシステムディスクのルートディレクトリに存在している場合、システム起動時に内容がシステムのキーテーブルに登録されます。
:::


**CURSOR MOVEMENTS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
|  1 | Character left| カーソル左 (←) | \<ESC\> K |
|  2 |   Alternative|  | |
|  3 | Character right| カーソル左 (→) | \<ESC\> M |
|  4 | Word left|  | |
|  5 | Word right|  | |
|  6 | Line up| カーソル上 (↑) | \<ESC\> H | 
|  7 | Line down| カーソル下 (↓) | \<ESC\> P |
|  8 | Scroll down|  | |
|  9 | Scroll up|  | |
| 10 | Page up| | |
| 11 | Page down|  | |
| 13 | To right on line |  | |
| 14 | To top of page |  | |
| 15 | To bottom of page |  | |
| 16 | To top of file |  | |
| 17 | To end of file |  | |
| 18 | To beginning of block |  | |
| 19 | To end of block |  | |
| 20 | To last cursor position |  | |

**INSERT & DELETE:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 21 | Insert mode on/off |  | \<ESC\>R |
| 22 | Insert line |  |  |
| 23 | Delete line |  |  |
| 24 | Delete to end of line |  |  |
| 25 | Delete right word |  |  |
| 26 | Delete character under cursor | 〔Delete〕 | \<ESC\> S |
| 27 | Delete left character | 〔BS〕 | Ctrl-H |
| 28 |   Alternative |  |  |

**BLOCK COMMANDS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 29 | Mark block begin |  |  |
| 30 | Mark block end |  |  |
| 31 | Mark single word |  |  |
| 32 | Hide/display block |  |  |
| 33 | Copy block |  |  |
| 34 | Move block |  |  |
| 35 | Delete block |  |  |
| 36 | Read block from disk |  |  |
| 37 | Write block to disk |  |  |


**MISC. EDITING COMMANDS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 38 | End edit |  | |
| 39 | Tab |  |  |
| 40 | Auto tab on/off |  |  |
| 41 | Restore line |  |  |
| 42 | Find |  |  |
| 43 | Find & replace |  |  |
| 44 | Repeat last find |  |  |
| 45 | Control character prefix |  |  |


:::note
PC-9801 用として発売された Turbo Pascal ではこの設定は不要かもしれません。
:::

### ・MSX-DOS 用の設定
MSX-DOS 用 の設定です。まずは 80 桁モードに変更してから TINST を実行します。

```
A> MODE 80
A> TINST
```

**CURSOR MOVEMENTS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
|  1 | Character left| カーソル左 (←) | Ctrl-] |
|  2 |   Alternative|  | |
|  3 | Character right| カーソル左 (→) | Ctrl-\\ |
|  4 | Word left|  | |
|  5 | Word right|  | |
|  6 | Line up| カーソル上 (↑) | Ctrl-^ | 
|  7 | Line down| カーソル下 (↓) | Ctrl-_ |
|  8 | Scroll down|  | |
|  9 | Scroll up|  | |
| 10 | Page up| | |
| 11 | Page down|  | |
| 13 | To right on line |  | |
| 14 | To top of page |  | |
| 15 | To bottom of page |  | |
| 16 | To top of file |  | |
| 17 | To end of file |  | |
| 18 | To beginning of block |  | |
| 19 | To end of block |  | |
| 20 | To last cursor position |  | |

**INSERT & DELETE:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 21 | Insert mode on/off |  |  |
| 22 | Insert line |  |  |
| 23 | Delete line |  |  |
| 24 | Delete to end of line |  |  |
| 25 | Delete right word |  |  |
| 26 | Delete character under cursor | 〔Delete〕 | \<DEL\> |
| 27 | Delete left character | 〔BS〕 | Ctrl-H |
| 28 |   Alternative |  |  |

**BLOCK COMMANDS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 29 | Mark block begin |  |  |
| 30 | Mark block end |  |  |
| 31 | Mark single word |  |  |
| 32 | Hide/display block |  |  |
| 33 | Copy block |  |  |
| 34 | Move block |  |  |
| 35 | Delete block |  |  |
| 36 | Read block from disk |  |  |
| 37 | Write block to disk |  |  |


**MISC. EDITING COMMANDS:**

| NO | 機能 | ショートカット | 表示|
|:---:|:---|:---|:---|
| 38 | End edit | 〔ESC〕〔0〕 | \<ESC\> 0|
| 39 | Tab |  |  |
| 40 | Auto tab on/off |  |  |
| 41 | Restore line |  |  |
| 42 | Find |  |  |
| 43 | Find & replace |  |  |
| 44 | Repeat last find |  |  |
| 45 | Control character prefix |  |  |

:::note
38: End edit は〔Ctrl〕キーの押せない MSX0 用の設定です。〔Sym〕〔ESC/0〕〔ESC/0〕と押して設定すると、Faces キーボードでもコードエディタを抜ける事が可能になります。
:::

# おわりに
Delphi とはキーボードショートカットが異なるのでこうやって書いておかないと忘れてしまいます。

**See also:**

 - [Embarcadero が公開しているアンティークソフト一覧 (Qiita)](https://qiita.com/ht_deko/items/ae7605c6b1f426ae234a)
 - [Pascal の勉強に使えそうな Pascal 処理系 (Qiita)](https://qiita.com/ht_deko/items/6376997a6d74e77c89e3)
 - [RunCPM (Z80 CP/M 2.2 エミュレータ) (ht-deko.com)](https://ht-deko.com/arduino/runcpm.html)
 - [[Delphi] RAD Studio IDE ショートカット チートシート (Qiita: @pik)](https://qiita.com/pik/items/7d57ba02d4a72a88f33f) 

## 索引

 - [Turbo Pascal 3.0.x の使い方](https://qiita.com/ht_deko/items/ec212f5cc17cbe5f718b)
   - [Turbo Pascal 3.0.x の Pascal](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b)
   - [Turbo Pascal 3.0.x のスクリーン設定](https://qiita.com/items/0d8976801c02ec685bd6)
   - **Turbo Pascal 3.0.x のキーボードショートカット**

[^1]: 貼り付けた先が新しい選択領域となるため、貼り付けた先を編集してしまうと、連続貼り付けしようとした時に予想外の結果になる事があります。