兩種進入方式
你自己按 Ctrl+P,或是爾雅發現這根本不是文字檔。
① 文字檔按 Ctrl+P
唯讀。看到的就是「存檔時會寫進磁碟的那些位元組」,包含 BOM、目前編碼與 LF/CRLF 換行。
再按一次 Ctrl+P 或 Esc 回到文字編輯,游標會停在同一個位元組上。
② 二進位檔開啟時自動進入
無法以文字解碼、或含有 NUL 位元組的檔案,一開啟就是這個檢視,而且回不去文字編輯(本來就沒有文字可以編)。
小於 64 MiB 時可以改位元組;超過就維持串流唯讀(見 3.3.8)。
因為文字文件的內容存在文字緩衝區裡,位元組只是「它存出去會長怎樣」的呈現。要直接改位元組,那個檔案得本來就是二進位檔。想在文字檔裡改某個位元組,實務上的做法是回到文字編輯改字元,或用 F7 換編碼(見 3.1.2)。
畫面上有什麼
三欄:位移、位元組、可列印字元。
| 欄位 | 說明 |
|---|---|
| 位移欄 | 這一列第一個位元組的位置。至少八位數,短檔案前面補零,看起來就像經典的 hex dump。 |
| 位元組欄 | 每個位元組兩位十六進位。每八個一組,中間多一個空白好數。檔案結尾不足的位置留空白。 |
| 字元欄 | 用 | 框起來。可列印的 ASCII 直接顯示,其他一律顯示成 .——所以中文會是一串點,因為一個中文字是三個位元組。 |
狀態列變成專屬格式:位移 目前/總計|每列幾位元組 │ 檢視種類 │ 編碼或模式 │ 檔名。游標所在的位元組在兩欄裡會同時反白。
唯讀檢視的四個按鍵
移動鍵照舊,另外四個是這個畫面專屬的。
| 按鍵 | 做什麼 |
|---|---|
| W | 每列 16 或 32 位元組之間切換。32 位元組需要 144 欄的終端寬度,不夠寬會維持 16 並顯示「畫面寬度不足,每列 32 位元組需要 144 欄」。 |
| O | 位移欄改用十進位或十六進位顯示。訊息列說「位移欄改用 10 進位」。 |
| G 或 Ctrl+G | 跳到指定位移(見 3.3.4)。 |
| Ctrl+P 或 Esc | 回到文字編輯。 |
| 方向鍵 / PageUp PageDown | 依位元組、列、頁移動。 |
| Home End | 移到這一列的第一個/最後一個位元組。 |
| Ctrl+Home Ctrl+End | 移到檔案開頭/結尾。 |
十六進位檢視不會把整個檔案載進記憶體,只讀你正在看的那一段。所以拿它去看幾百 MB 的檔案也是瞬間的事。
跳到指定位移
支援四種寫法,因為十進位跟十六進位很容易搞混。
| 你輸入 | 會被當成 |
|---|---|
| 1F40 | 照目前位移欄的進位解讀。位移欄是十六進位就當十六進位,是十進位就當十進位——輸入列的提示會寫現在是哪一種。 |
| 0x1F | 一律十六進位 |
| $1F | 一律十六進位 |
| 1Fh | 一律十六進位 |
| 0d31 | 一律十進位 |
- 成功時訊息列說「已跳至位移 0x1F」。
- 格式不對會說「位移格式錯誤;請輸入數字,或以 0x 前綴表示十六進位」,然後再問一次。
- 超過檔案大小會停在結尾。
從別的工具(xxd、除錯器、檔案格式規格書)抄來的位移多半是十六進位,直接補上 0x 最保險,不必先確認位移欄現在是哪一種。
二進位檔案自動進入
判斷方式很單純:前 8 KiB 裡有沒有 NUL 位元組。
- 提示列換成位元組編輯專用的那一組,最後直接寫出離開方式。
- 狀態列的第二格是 二進位(不是「十六進位」),第三格是 覆寫/插入/唯讀。
- 按 Esc 不會回到文字編輯——因為沒有文字編輯可以回去。它只會在訊息列再說一次離開方式:「二進位檔案只能以十六進位檢視;F11 關閉分頁、Ctrl+X 離開」。
UTF-16 文字檔滿滿都是 NUL,看起來很像二進位檔。爾雅會認出這個型態,直接回報「不支援的文字編碼」,而不是把它攤成可編輯的位元組——免得你以為那是二進位檔而改壞一份文字檔(見 3.1.1)。
改一個位元組
輸入兩個十六進位數字:先高半位元組,再低半位元組。
- 把游標移到要改的位元組上。兩欄會同時反白。
- 輸入第一個數字。例如要改成 4A,先按 4——高半位元組就位。
- 輸入第二個數字。按 A,這個位元組變成 4A,游標自動跳到下一個位元組。
- 兩次輸入算同一步復原。按一次 Ctrl+Z 就回到原本的值,不會只退一半。
訊息列會說「請輸入十六進位數字(0-9、A-F)才能修改位元組」。可以輸入的只有 0–9 與 A–F(大小寫都行)。
儲存、復原、重做、另存新檔都沿用原本的快捷鍵(Ctrl+S、Ctrl+Z、Ctrl+Y、F12)。二進位文件沒有文字緩衝區,所以編碼轉換、換行轉換與雙欄比對都不適用,按了會說「十六進位檢視不支援這個動作」。
插入與刪除位元組
這個畫面有自己的 I 鍵,因為 Mac 鍵盤沒有 Insert。
| 按鍵 | 做什麼 |
|---|---|
| I(或 Insert) | 在覆寫與插入之間切換。狀態列第三格會跟著變。 |
| Backspace | 刪除游標前面那個位元組 |
| Delete | 刪除游標所在的位元組 |
覆寫模式(預設)
輸入的位元組蓋掉原本的,檔案長度不變。
改結構化格式(PNG、ZIP、韌體)時通常要維持長度,用這個。
插入模式
輸入的位元組插進去,後面整個往後推,檔案變長。
插入模式下游標可以停在最後一個位元組之後,方便在檔尾附加內容。
爾雅有 100 步復原,但檔案格式本身通常沒有容錯:長度錯一個位元組、校驗值沒跟著改,整個檔就壞了。改之前先 F12 另存一份,或在外面複製一份原檔。
大檔案維持串流唯讀
64 MiB 是同一條線,跟大型文字檔一致。
| 檔案 | 開起來是 | 能不能改 |
|---|---|---|
| 小於 64 MiB 的二進位檔 | 位元組載入記憶體 | 可以:改、插入、刪除、復原、儲存 |
| 64 MiB 以上的二進位檔 | 串流讀取 | 不行,唯讀。狀態列第三格顯示 唯讀 |
- 開啟大型二進位檔時,訊息列說「已開啟二進位檔案 disk.img(4.2 GB),唯讀十六進位檢視」。
- 試著修改會說「此二進位檔案為唯讀,無法修改」。
- 提示列也會換成唯讀版本,最後標著「唯讀」兩個字。
可編輯代表整份位元組要放在記憶體裡。爾雅寧可讓大檔維持唯讀,也不願意在你開一個 8 GB 映像檔時把機器拖垮——跟大型文字檔的取捨是同一套(見 3.2.3)。
常見錯誤
十六進位檢視最常見的七個狀況。
| 現象 | 原因與處理 |
|---|---|
| 在文字檔的十六進位裡改不了東西 | 對文字檔而言這個檢視是唯讀的(3.3.1)。 |
| 按 Esc 回不去 | 這是二進位檔,沒有文字編輯可回。F11 關頁籤或 Ctrl+X 離開(3.3.5)。 |
| 按 W 沒有變成 32 位元組 | 終端寬度不足 144 欄。放大視窗再按(3.3.3)。 |
| 跳位移跳到奇怪的地方 | 輸入被當成另一種進位。加 0x 前綴(3.3.4)。 |
| 按了字母鍵說要輸入十六進位數字 | 只有 0–9、A–F 能改位元組(3.3.6)。 |
| 中文在字元欄看起來是一堆點 | 字元欄只顯示可列印的 ASCII,多位元組字元一律顯示成點(3.3.2)。 |
| 改完存檔,檔案打不開了 | 二進位格式通常有長度與校驗要求。用備份還原(3.3.7)。 |