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

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

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

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

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

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

решение1

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

решение2

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

По умолчанию 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.

Связанный контент