Видаліть дані з середини двійкового файлу в hexl-режимі


13

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

В ідеалі я хотів би використовувати emacs, і hexl-режим видається імовірним кандидатом.

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

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

Відповіді:


9

Режим Hexl не дозволяє видаляти символи. Ця відповідь із переповнення стека пропонує вирішення проблеми: перезапишіть символи, які ви хочете видалити, іншим символом (скажімо, "X"), вимкніть з режиму hexl, знайдіть символи та видаліть їх.


4

Використовуйте nhexl-режим (який можна встановити як пакет від ELPA). Nhexl-режим - другорядний режим; текст залишається редагованим у головному режимі, в якому вже був буфер.

За замовчуванням nhexl-режим активує режим перезапису, але його все одно можна видалити. Щоб вставити текст, вимкніть режим перезапису за допомогою 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-режим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.