開檔時的編碼偵測
爾雅會自己猜,猜完把結果寫在狀態列上。
- 爾雅認得五種編碼:UTF-8、UTF-8 BOM、Big5、GBK、Shift_JIS。
- 開檔不會改變檔案。偵測出來的編碼只是「下次存檔要用哪一種」的預設值。
- 偵測是靠內容統計猜的,短檔案有可能猜錯(例如只有幾個中文字的 Big5 檔被當成 GBK)。看到亂碼就直接按 F7 換一個試(見 3.1.2)。
- UTF-16/UTF-32 這類寬字元編碼不在支援範圍,開啟時會直接回報「detected unsupported text encoding: UTF-16LE」之類的訊息,不會硬解成亂碼,也不會偽裝成二進位檔讓你去改位元組。
F7 切換儲存編碼
按一次換一種,循環五個選項。
它改的是「下一次儲存要用哪一種編碼」。真正的轉換發生在 Ctrl+S 的時候。所以按完 F7 之後:想轉就存檔,不想轉就再按幾次轉回去,或直接 Ctrl+Z 復原——編碼切換也算一步,可以復原與重做。
最常見的用法就是把舊的 Big5 文件轉成 UTF-8:開檔(狀態列顯示 Big5)→ 按 F7 到 UTF-8 → Ctrl+S。反過來要交給只吃 Big5 的老系統也是同一招。
轉不過去的時候
爾雅會跳過那個編碼,不會用問號把你的字換掉。
Big5 沒有「𠮟」、Shift_JIS 沒有「愛心 Emoji」——這種情況下很多工具會默默寫入 ? 或 □,等你發現已經來不及。爾雅的做法不一樣:
- 先試著轉。整份文件都能用目標編碼表示才算成功。
- 有字表示不了就跳過這個編碼,自動試下一個。所以按一次 F7 有可能直接從 UTF-8 跳到 GBK——因為中間的 Big5 表示不了文件裡的某個字。
- 五種都試過都不行,才顯示「無法切換為 …:文件含有此編碼無法表示的字元」,並且維持原本的編碼不變。
這是爾雅在編碼上最重要的一條原則。存檔之後的檔案,要嘛完整、要嘛就是原本的編碼,不會出現一半正常一半問號的檔案。找不出是哪個字轉不過去時,先轉成 UTF-8 存一份,再用其他工具比對。
F8 切換 LF/CRLF
跟編碼一樣,是「下次存檔」才生效。
| 顯示 | 是什麼 | 常見於 |
|---|---|---|
| LF | 換行 \n | Linux、macOS、大部分程式語言與設定檔 |
| CRLF | 回車+換行 \r\n | Windows 的文字檔、部分老系統匯出的資料 |
- 爾雅開檔時會看出來原本是哪一種,狀態列最後一格顯示。
- F8 在兩者之間切換,訊息列說「已切換為 CRLF;儲存後完成換行格式轉換」。
- 一樣可以 Ctrl+Z 復原。
- 檔案結尾有沒有換行也會被保留:原本沒有結尾換行的檔案,存回去也不會被硬加一個。
那通常就是換行格式被換掉了。用爾雅開檔看狀態列最後一格,按 F8 轉回原本那一種再存,diff 就乾淨了。
語法高亮怎麼決定
看完整檔名,再看副檔名;認得出來就上色,認不出來就純文字。
- 認得的語言會顯示在狀態列的第四格(例如 Markdown、TOML)。沒有那一格就是沒有高亮。
- 常見程式語言都有:Rust、C/C++、Go、Python、Java、JavaScript/TypeScript、Shell、SQL、Markdown 等。
- 結構化格式:TOML、YAML、JSON、XML、.ini、.conf。
- 選取的灰底會蓋在高亮顏色上面,兩者不會互相干擾。
單行超過 64 KiB,或游標一次跳過大量行時,爾雅會改用有界的高亮策略,避免語法解析把畫面卡住。這時候可能會看到某些行暫時沒有上色——內容沒事,只是沒替它上色。另外大型檔案唯讀模式完全停用語法高亮(見 3.2.2)。
Linux 設定檔也有高亮
很多設定檔沒有副檔名,爾雅是認完整檔名的。
| 類別 | 認得的檔名或副檔名 |
|---|---|
| 通用設定 | .conf、.ini、.editorconfig |
| systemd unit | .service、.socket、.timer、.mount、.target、.network |
| 環境變數 | .env、.env.* |
| 結構化格式 | TOML、YAML、JSON、XML |
| Shell 啟動檔 | .bashrc、.profile、.zshrc、/etc/default/* |
| 系統設定 | .gitconfig、sshd_config、ssh_config、sudoers、fstab、hosts、resolv.conf |
| 服務設定 | nginx.conf、Apache 設定、crontab、Dockerfile/Containerfile、Makefile |
這一份清單是刻意列進必要支援範圍的——爾雅預期的使用情境之一,就是SSH 進伺服器改設定檔。
Ctrl+T 格式化文件
只做三種格式:TOML、YAML、JSON。
| 訊息列 | 意思 |
|---|---|
| 已格式化文件;Ctrl+Z 可復原 | 成功。整批算一步復原(見 2.4.2)。 |
| 文件格式已是最新狀態 | 本來就整齊,什麼都沒改。 |
| 目前僅支援格式化 TOML、YAML 與 JSON 文件 | 這個檔案不是那三種。爾雅看的是副檔名。 |
| 格式化失敗,文件未變更:… | 語法有錯。錯誤訊息通常會指出哪一行,文件維持原樣。 |
很多格式化工具會把註解吃掉,爾雅不會。這一點對設定檔特別重要——註解常常是唯一寫著「為什麼要這樣設」的地方。
改完一個 .yaml 之後按一下 Ctrl+T:沒事就代表語法是對的,有錯它會直接告訴你錯在哪。比部署上去才發現快得多。
段落重排與段落寬度
把一段長文字重新斷行到指定寬度。預設沒有綁按鍵。
| 動作名稱 | Classic 的鍵 | 做什麼 |
|---|---|---|
| set_paragraph_width | Alt+M | 設定重排寬度,範圍 20–500 欄,預設 80。 |
| reflow_paragraph | Alt+Q | 把游標所在的段落依設定寬度重新編排。 |
- 「段落」的界線是空行:從游標往上下找到最近的空行為止。
- 游標停在空行上按重排,會說「目前游標不在段落內」。
- 成功時說「已依 80 欄重新編排段落」。整段算一步復原。
- 寬度輸入超出 20–500 會說「段落寬度必須是 20 到 500 的整數」。
- 重排會依終端欄寬計算,中文全形字算兩欄,所以排出來的右邊界是真的對齊的。
跟常用語、巨集一樣(見 2.4.8)。要用就換 Erya Classic,或在按鍵配置編輯器裡自己綁(見 4.1.4)。
Ctrl+L 的自動換行只影響畫面,檔案內容一個字都不會動;段落重排是真的在文件裡插入換行。要交出去的純文字稿用重排,自己閱讀長行用自動換行。
常見錯誤
編碼與格式最容易踩到的六件事。
| 現象 | 原因與處理 |
|---|---|
| 開起來整份是亂碼 | 偵測猜錯了。按 F7 換一種看看,對了再存(3.1.2)。 |
| 按了 F7 檔案沒變 | 要存檔才會真的轉(3.1.2)。 |
| 按 F7 跳過了某一種編碼 | 那一種表示不了文件裡的某個字,被自動跳過了(3.1.3)。 |
| Git diff 顯示整個檔案都改了 | 換行格式被換掉。F8 轉回去(3.1.4)。 |
| 設定檔沒有語法高亮 | 檔名不在認得的清單裡(3.1.6),或它是大型檔案(3.2.2)。 |
| Ctrl+T 說不支援 | 只做 TOML/YAML/JSON 三種(3.1.7)。 |