我有一个相当大的二进制文件(几十 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,也可能会感兴趣。