2 つの入り方
自分で Ctrl+P を押すか、Erya が「これはテキストではない」と判断するか。
① テキストファイルで Ctrl+P
読み取り専用です。表示されるのは「保存したらディスクに書かれるバイト列」そのもので、BOM、現在の文字コード、LF/CRLF を含みます。
もう一度 Ctrl+P、または Esc でテキスト編集に戻り、カーソルは同じバイトの位置にとどまります。
② バイナリファイルは自動でこの表示
テキストとして復号できない、または NUL バイトを含むファイルは、開いた時点でこの表示になり、戻ることはできません。戻る先のテキストが存在しないからです。
64 MiB 未満ならバイトを編集できます。それ以上はストリーム読みの読み取り専用です(3.3.8 参照)。
テキスト文書の実体はテキストバッファーであり、バイト列は「保存したらこうなる」という表示にすぎません。バイトを直接いじるには、そのファイルがもともとバイナリである必要があります。テキストファイル内のバイトを変えたいときは、文字を編集するか、F7 で文字コードを変えてください(3.1.2 参照)。
画面に表示されるもの
3 つの欄:オフセット、バイト、印字可能文字。
| 欄 | 内容 |
|---|---|
| オフセット | その行の先頭バイトの位置。最低 8 桁でゼロ詰めなので、短いファイルでも古典的なダンプの見た目になります。 |
| バイト | 1 バイトを 16 進数 2 桁で。8 個ごとに区切り、間に空白を 1 つ余分に入れて数えやすくしています。末尾で足りない分は空白です。 |
| 文字 | | で囲まれます。印字可能な ASCII はそのまま、それ以外はすべて . です。日本語はバイト数ぶんの点が並びます。 |
ステータス行も専用の形になります:オフセット 現在/全体|1 行のバイト数 │ 表示の種類 │ 文字コードまたはモード │ ファイル名。カーソル位置のバイトは 2 つの欄で同時に反転します。
読み取り専用表示の 4 キー
移動キーは通常どおり。この画面専用が 4 つあります。
| キー | 内容 |
|---|---|
| W | 1 行 16 バイトと 32 バイトを切り替えます。32 バイトには 144 桁の幅が必要で、足りなければ 16 のままで「画面幅が足りません。1 行 32 バイトには 144 桁が必要です」と出ます。 |
| O | オフセットを 10 進数/16 進数で表示します。「オフセットを 10 進数で表示します」。 |
| G または Ctrl+G | オフセットへ移動します(3.3.4 参照)。 |
| Ctrl+P または Esc | テキスト編集に戻ります。 |
| 矢印 / PageUp PageDown | バイト・行・ページ単位で移動します。 |
| Home End | その行の最初/最後のバイトへ。 |
| Ctrl+Home Ctrl+End | ファイルの先頭/末尾へ。 |
16 進数表示はファイル全体をメモリーに読み込みません。見ている部分だけを読みます。数百 MB のファイルでも一瞬で開きます。
オフセットを指定して移動
10 進数と 16 進数を取り違えやすいので、4 通りの書き方に対応しています。
| 入力 | 解釈 |
|---|---|
| 1F40 | オフセット欄の現在の基数で解釈します。どちらかは入力欄の案内に出ています。 |
| 0x1F | 常に 16 進数 |
| $1F | 常に 16 進数 |
| 1Fh | 常に 16 進数 |
| 0d31 | 常に 10 進数 |
- 成功すると「オフセット 0x1F に移動しました」。
- 形式が不正なら「オフセットの形式が正しくありません。数値、または 0x 接頭辞で 16 進数を入力してください」と出て、もう一度尋ねます。
- ファイルサイズを超える値は末尾で止まります。
他のツール(xxd、デバッガー、フォーマット仕様書)から写したオフセットはたいてい 16 進数なので、0x を付けておくのが安全です。オフセット欄の基数を確認する手間も省けます。
バイナリファイルは自動でこの表示
判定は単純です。先頭 8 KiB に NUL バイトがあるかどうか。
- ヒント行がバイト編集用に変わり、末尾に出口も書かれます。
- ステータス行の 2 番目は バイナリ(「16 進数」ではありません)、3 番目は 上書き/挿入/読み取り専用。
- Esc ではテキスト編集に戻りません。戻る先が無いからです。押すと出口をもう一度伝えます:「バイナリファイルは 16 進数表示でのみ開けます。F11 でタブを閉じる、Ctrl+X で終了」。
UTF-16 のテキストは NUL だらけで、見た目はバイナリそっくりです。Erya はその形を見分け、非対応の文字コードとして報告します。編集可能なバイト列として見せることはしません。問題のないテキストファイルを壊しかねないからです(3.1.1 参照)。
1 バイトを書き換える
16 進数を 2 桁入力します。上位半バイト、次に下位半バイト。
- 対象のバイトにカーソルを置きます。2 つの欄で反転します。
- 1 桁目を入力します。4A にするなら 4。上位半バイトが決まります。
- 2 桁目を入力します。A を押すとそのバイトが 4A になり、カーソルが次へ進みます。
- この 2 回で 1 手です。Ctrl+Z 1 回で元の値に戻り、半分だけ戻ることはありません。
「バイトを変更するには 16 進数(0-9、A-F)を入力してください」と出ます。書き込めるのは 0〜9 と A〜F だけです(大文字小文字どちらでも可)。
保存・元に戻す・やり直す・名前を付けて保存は通常どおりのキー(Ctrl+S、Ctrl+Z、Ctrl+Y、F12)です。バイナリ文書にはテキストバッファーが無いため、文字コード変換・改行コード変換・比較は使えません。押すと「16 進数表示はこの操作に対応していません」と出ます。
バイトの挿入と削除
Mac のキーボードに Insert が無いため、この画面には専用の I があります。
| キー | 内容 |
|---|---|
| I(または Insert) | 上書きと挿入を切り替えます。ステータス行の 3 番目が変わります。 |
| Backspace | カーソルの前のバイトを削除 |
| Delete | カーソル位置のバイトを削除 |
上書き(既定)
入力したバイトが元のバイトを置き換え、ファイルの長さは変わりません。
PNG・ZIP・ファームウェアなど、長さを保つ必要がある形式ではこちらを。
挿入
入力したバイトが差し込まれ、後ろが押し出されてファイルが伸びます。
挿入モードではカーソルを最後のバイトより後ろに置けるので、末尾への追加ができます。
Erya には 100 手の履歴がありますが、ファイル形式のほうに余裕がありません。長さが 1 バイトずれる、チェックサムを更新し忘れる、それだけで壊れます。先に F12 で控えを作るか、外部で原本を複製してください。
大きなファイルは読み取り専用のまま
境界は大容量テキストと同じ 64 MiB です。
| ファイル | 開き方 | 編集できるか |
|---|---|---|
| 64 MiB 未満のバイナリ | バイトをメモリーに保持 | できます:変更・挿入・削除・元に戻す・保存 |
| 64 MiB 以上のバイナリ | ストリーム読み | できません。3 番目のマスが 読み取り専用 |
- 大きなバイナリを開くと「バイナリファイル disk.img(4.2 GB)を読み取り専用の 16 進数表示で開きました」と出ます。
- 変更しようとすると「このバイナリファイルは読み取り専用のため変更できません」。
- ヒント行も読み取り専用版になり、末尾に「読み取り専用」と付きます。
編集できるということは、全バイトをメモリーに置くということです。8 GB のイメージを開いたときにマシンを止めてしまうくらいなら、読み取り専用のほうがましだという判断で、大容量テキストと同じ考え方です(3.2.3 参照)。
よくあるつまずき
16 進数表示での 7 つの場面。
| 症状 | 原因と対処 |
|---|---|
| テキストファイルのバイトを変えられない | テキストファイルでは読み取り専用です(3.3.1)。 |
| Esc で戻れない | バイナリファイルで、戻る先のテキスト編集がありません。F11 か Ctrl+X(3.3.5)。 |
| W で 32 バイトにならない | ターミナルが 144 桁未満です。広げてから押してください(3.3.3)。 |
| 移動先が想定と違う | 入力が別の基数で解釈されました。0x を付けます(3.3.4)。 |
| 英字キーで「16 進数を入力してください」 | 変更できるのは 0〜9 と A〜F だけです(3.3.6)。 |
| 日本語が点の羅列に見える | 文字欄は印字可能な ASCII だけを表示し、多バイト文字は点になります(3.3.2)。 |
| 編集して保存したら開けなくなった | バイナリ形式は長さやチェックサムに厳格です。バックアップから戻してください(3.3.7)。 |