使用十六进制模式从二进制文件中间删除数据


12

我有一个相当大的二进制文件(几十MB),想在中间的某个位置删除几个KB,它是夹在中间的数据,而不是开头或结尾。

理想情况下,我想使用emacs,十六进制模式似乎是一个可能的选择。

是否可以从十六进制缓冲区中删除一行?Ctrl- k似乎做不到。我很高兴查看代码,但是无论出于何种原因寻找hexl-mode.el,我发现的只是Ubuntu 10.04计算机Emacs 23.1上的已编译.elc文件。

另外:我想偷偷摸摸地添加另一个十六进制模式的问题,该问题与标题中的问题不直接相关,但属于我要解决的完整问题的一部分:如果我可以每行显示X个十六进制字符,其中X显然会随着我正在编辑的二进制文件的格式而改变,我找不到用十六进制模式执行此操作的方法,以为我会在这里抛出问题。

Answers:


9

十六进制模式不允许您删除字符。堆栈溢出的答案提出了一种解决方法:用另一个字符(例如“ X”)覆盖要删除的字符,退出十六进制模式,找到字符并在那里删除它们。


3

使用nhexl-mode(可以从ELPA作为软件包安装)。Nhexl模式是次要模式;在缓冲区已进入的主要模式下,文本仍可编辑。

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

您可以将以下代码段放入init文件(~/.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,也可能很有趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.