10

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

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

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

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

2 ответа2

7

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

2

Используйте nhexl-mode (который можно установить как пакет от 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .