進入比對
F4,然後用同一個檔案對話盒選兩次。
- 按 F4。第一列顯示「選擇左側檔案」,操作方式跟開檔完全一樣(見 2.1.2)。
- 選左邊那個檔。訊息列說「已選左側:/etc/nginx/nginx.conf;請選擇右側檔案」,第一列換成「選擇右側檔案」。
- 選右邊那個檔。進入比對畫面,訊息列說「比對完成:共 7 個差異區塊」。
進入比對時,爾雅會先把兩個檔案各複製一份到暫存目錄,之後所有的差異互抄都寫在暫存副本上。原始檔案要等你明確確認才會被覆蓋(見 3.4.7)。所以放心抄來抄去,反悔了直接 Esc 放棄就好。
- 大型檔案(64 MiB 以上):「大型檔案唯讀模式暫不支援雙欄比對,以避免載入完整內容造成記憶體耗盡」。
- 二進位檔案:「二進位檔案不支援雙欄比對」。
選到這兩種時會在選檔階段就被擋下來,不會進到比對畫面。
畫面怎麼看
左右各一半,中間一條直線;每一側都有自己的行號欄。
| 畫面元素 | 說明 |
|---|---|
| 第二列(提示列) | 換成左右兩個檔名,各佔畫面一半,中間的分隔線跟底下的內容對齊。 |
| 行號欄 | 每側四位數行號,後面接兩個標記欄:差異種類與游標。 |
| 空白列 | 某一側沒有對應內容時該側留空——這就是「對齊」的效果,讓相同的行排在同一列上。 |
| 狀態列 | 游標在第幾列/共幾列、目前是第幾個差異/共幾個、水平捲到第幾欄,後面接圖例。 |
| 訊息列 | 常駐顯示比對專用的操作說明。做了動作之後會換成該動作的回報。 |
三種差異標記
不必只靠顏色判讀——每一種差異都有自己的符號。
| 符號 | 意思 | 畫面上長怎樣 |
|---|---|---|
| ≠ | 兩側都有,但內容不同 | 兩側都標,而且行內不一樣的那幾個字會用更強的顏色再標一次 |
| - | 只有左側有 | 左側標記,右側該列留空 |
| + | 只有右側有 | 右側標記,左側該列留空 |
| (空白) | 兩側相同 | 沒有標記 |
另外兩個標記跟差異無關,是位置指示:
- ▶ 是游標,左右兩側同時出現在同一列——兩邊的游標是綁在一起的。
- 整列變亮代表游標所在的列。
- 行號變成黃底代表這是「目前這個差異區塊」,也就是 N/P 停下來的地方。
狀態列說「目前差異 2/7」的 7,數的是區塊不是行。連著改的五行算一個區塊,N 一次就跳過整塊,抄的時候也是整塊一起抄。
游標與差異是兩件事
這是比對畫面最容易搞混的一點。
游標(▶)
用 ↑ ↓、PageUp PageDown、Home End 移動,一次一列,相同的行也會停。
複製差異看的是游標在哪一列。
目前差異(黃底行號)
用 N/P 跳,一次一個區塊,只停在有差異的地方。
跳過去的時候游標也會跟著移動,所以跳完就可以直接抄。
按了 Shift+→ 卻沒反應、訊息列說「游標所在位置沒有可複製的差異區塊」,就是這個原因。先按 N 跳到差異上,再抄。
移動與捲動
兩側永遠同步,不會各捲各的。
| 按鍵 | 做什麼 |
|---|---|
| ↑ ↓ | 游標上下一列,畫面跟著跑 |
| PageUp PageDown | 整頁移動 |
| Home End | 到比對結果的最前面/最後面 |
| ← → | 兩側同步水平捲動,看行很長的內容時用 |
| Ctrl+← Ctrl+→ | 水平一次捲 8 欄 |
| N | 下一個差異區塊 |
| P | 上一個差異區塊 |
N/P 走到最後一個差異之後會繞回第一個,所以連按下去可以繞著整份文件檢查。
把差異抄到另一邊
兩個鍵,方向就是箭頭的方向。
| 按鍵 | 做什麼 |
|---|---|
| Shift+→ | 把游標所在的差異區塊從左邊抄到右邊(寫進右側暫存檔) |
| Shift+← | 把游標所在的差異區塊從右邊抄到左邊 |
- 抄完訊息列說「已將目前差異從左側複製到右側暫存檔;剩餘 6 個差異區塊」——剩幾個是直接告訴你的。
- 抄完之後游標與畫面位置不動,讓你確認結果對不對。要去下一個差異請自己按 N。
- 整個區塊一起抄,不是一行一行抄。
- 寫暫存檔失敗時(磁碟滿、權限問題)會說「更新暫存檔失敗:…」。
N 跳到差異 → 看一眼 → 要抄就 Shift+→ 或 Shift+←,不抄就再按 N → 一路走到繞回第一個 → 最後按 Ctrl+S 套用。全程只用四個鍵。
套用回原始檔案
按目前配置的儲存鍵(預設 Ctrl+S),然後回答 Y 或 N。
- 按 Ctrl+S。沒有任何暫存變更時會直接說「目前沒有需要套用的暫存變更」,不會問你。
- 按 Y 確認。爾雅會先檢查原始檔案有沒有被外部程式改過,沒問題才覆蓋。
- 成功。訊息列說「已確認並覆蓋 2 個原始檔案」——只有真的改過的那一側會被寫入。
- 失敗。說「未覆蓋原始檔案:…」,兩邊都不會被改。最常見的原因就是原檔在比對期間被別人動過。
- 按 N 取消。「已取消覆蓋,暫存變更仍保留」——你抄的東西還在,可以繼續改或稍後再套用。
這跟一般編輯的存檔保護是同一套機制(見 2.1.7)。比對通常要花一點時間,中間原檔被 git checkout 換掉是很常見的事,爾雅不會默默把它蓋回去。
離開時的三個選擇
還有沒套用的暫存變更時,Esc 會先問。
| 按鍵 | 結果 |
|---|---|
| Y | 覆蓋原始檔案然後離開(一樣會先檢查外部修改)。 |
| N | 放棄暫存變更並離開。你抄的東西全部不算數,原始檔案維持原樣。 |
| Esc | 回到比對畫面,什麼都不做。 |
沒有任何暫存變更時,Esc 直接離開,不會問。
暫存目錄只在比對期間存在。按 N 放棄離開之後,抄過的內容沒辦法救回來——重新比對一次就是了,反正原檔還在。
常見錯誤
雙欄比對的七個常見狀況。
| 現象 | 原因與處理 |
|---|---|
| Shift+→ 沒反應 | 游標停在相同的行上。先按 N 跳到差異(3.4.4)。 |
| 選檔時就被擋下來 | 選到大型檔案或二進位檔(3.4.1)。 |
| 抄完了但原檔沒變 | 改的是暫存副本。要按 Ctrl+S 再按 Y 才會寫回去(3.4.7)。 |
| 套用時說未覆蓋原始檔案 | 原檔在比對期間被外部改過。離開後重新比對一次(3.4.7)。 |
| 離開後發現抄的東西不見了 | 離開時按了 N(放棄並離開)(3.4.8)。 |
| 看不到行的後半段 | 用 ← → 水平捲動,兩側會同步(3.4.5)。 |
| 差異數量跟預期不一樣 | 數的是區塊不是行;連續的差異行算一個(3.4.3)。 |