使用 hexl-mode 從二進位檔案的中間刪除數據

使用 hexl-mode 從二進位檔案的中間刪除數據

我有一個相當大的二進位(幾十MB),想在中間的某個地方刪除幾KB,它是夾在中間的數據,而不是開頭或結尾。

理想情況下,我想使用 emacs,而 hexl-mode 似乎是一個可能的候選人。

是否可以從 hexl 緩衝區中刪除一行?Ctrl-k似乎沒有完成這項工作。我很高興查看程式碼,但無論出於何種原因,在查找 hexl-mode.el 時,我發現的只是我的 Ubuntu 10.04 機器 Emacs 23.1 上編譯的 .elc 檔案。

另外:我想偷偷地添加另一個十六進制模式問題,該問題與標題中的問題沒有直接關係,但它是我面臨的完整問題的一部分:如果我可以每行顯示X 個十六進制字符,其中X 顯然會隨著我正在編輯的二進位文件的格式而變化,我找不到使用十六進制模式來做到這一點的方法,我想我會在這裡提出這個問題。

答案1

Hexl 模式不允許您刪除字元。這個答案來自堆疊溢出建議了一種解決方法:用另一個字符(例如“X”)覆蓋要刪除的字符,切換出hexl模式,找到字符並在那裡刪除它們。

答案2

使用Nhexl模式(可從 ELPA 作為軟體包安裝)。 Nhexl-模式是次要模式;文字在緩衝區已處於的主要模式下仍可編輯。

預設情況下,nhexl-mode 會啟動覆蓋模式,但您仍然可以刪除。若要插入文本,請使用 關閉覆蓋模式M-x binary-overwrite-mode

您可以將以下程式碼片段放入 init 檔案 ( ~/.emacs) 中,以將Insert按鍵綁定到在 nhexl-mode 中切換覆蓋模式。

(unless (boundp 'nhexl-mode-map)
  (defvar nhexl-mode-map (make-sparse-keymap)
    "Keymap used when `nhexl-mode' is active."))
(define-key nhexl-mode-map [insert] 'binary-overwrite-mode)

如果您使用 nhexl-mode,也可能會感興趣。

相關內容