使用 hexl-mode 从二进制文件中间删除数据

使用 hexl-mode 从二进制文件中间删除数据

我有一个相当大的二进制文件(几十 MB),并且想要删除中间某处的几 KB,它是夹在中间的数据,不是开始也不是结束。

理想情况下,我想使用 emacs,并且 hexl-mode 似乎是一个不错的选择。

是否可以从 hexl 缓冲区中删除一行?Ctrl-k似乎无法完成这项工作。我很高兴查看代码,但无论出于什么原因,在寻找 hexl-mode.el 时,我找到的只是我的 Ubuntu 10.04 机器 Emacs 23.1 上编译的 .elc 文件。

此外:我想偷偷地添加另一个 hexl-mode 问题,该问题与标题中的问题没有直接关系,但却是我所面临的完整问题的一部分:如果我可以每行显示 X 个十六进制字符,这对我来说会非常有用,其中 X 显然会随着我正在编辑的二进制文件的格式而变化,我找不到用 hexl-mode 来做到这一点的方法,所以我想在这里提出这个问题。

答案1

Hexl 模式不允许您删除字符。这个答案来自 stack overflow 的建议是一种解决方法:用另一个字符(比如“X”)覆盖要删除的字符,切换出 hexl 模式,找到这些字符并在那里将其删除。

答案2

使用nhexl 模式(可作为 ELPA 的一个包进行安装)。Nhexl 模式是一种次要模式;文本在缓冲区所处的主要模式下仍可编辑。

默认情况下,nhexl-mode 会激活覆盖模式,但您仍可以删除。要插入文本,请使用 关闭覆盖模式M-x binary-overwrite-mode

您可以将以下代码片段放入您的初始化文件 ( ~/.emacs) 中,以将Insert键绑定到 nhexl 模式下切换覆盖模式。

(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,也可能会感兴趣。

相关内容