Удалить данные из середины двоичного файла в hexl-режиме

4845
Mcradle

У меня есть довольно большой двоичный файл (несколько десятков МБ), и я хотел бы удалить несколько КБ где-то посередине, это зажатые данные не начало и не конец.

В идеале я хотел бы использовать emacs, и hexl-mode кажется вероятным кандидатом.

Можно ли удалить одну строку из буфера hexl? Ctrl- kкажется, не делает работу. Я рад взглянуть на код, но по какой-то причине ищу hexl-mode.el, все, что я нахожу, - это скомпилированный файл .elc на моей машине Ubuntu 10.04 Emacs 23.1.

Дополнительно: в хитром движении я хотел бы добавить еще один вопрос в режиме hexl, который не имеет прямого отношения к вопросу, сформулированному в заголовке, но является частью полной проблемы, с которой я сталкиваюсь: это было бы очень полезно для меня, если бы Я мог отображать X шестнадцатеричных символов в каждой строке, где X, очевидно, меняется в зависимости от формата редактируемого двоичного файла, я не мог найти способ сделать это с помощью режима hexl и подумал, что здесь я добавлю вопрос.

10

2 ответа на вопрос

7
Anne

Режим Hexl не позволяет удалять символы. Этот ответ от переполнения стека предлагает обходной путь: переписать символы, которые вы хотите удалить, другим символом (скажем, «X»), переключиться из режима hexl, найти символы и удалить их там.

2
Gilles

Используйте nhexl-mode (который можно установить как пакет от ELPA). Nhexl-режим - второстепенный режим; текст остается редактируемым в основном режиме, в котором буфер уже был.

По умолчанию nhexl-mode активирует режим перезаписи, но вы все равно можете удалить. Чтобы вставить текст, отключите режим перезаписи с помощью M-x binary-overwrite-mode.

Вы можете поместить следующий фрагмент кода в файл инициализации ( ~/.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.

Похожие вопросы