Löschen Sie Daten aus der Mitte einer Binärdatei im Hexl-Modus

12

Ich habe eine ziemlich große Binärdatei (ein paar zehn MB) und möchte ein paar KB irgendwo in der Mitte entfernen. Es handelt sich um eingeklemmte Daten, weder am Anfang noch am Ende.

Idealerweise möchte ich Emacs verwenden und der Hexl-Modus scheint ein wahrscheinlicher Kandidat zu sein.

Ist es möglich, eine Zeile aus dem Hexl-Puffer zu löschen? Ctrl- kscheint den Job nicht zu machen. Ich schaue mir gerne den Code an, suche aber aus irgendeinem Grund nach hexl-mode.el. Alles, was ich finde, ist die kompilierte .elc-Datei auf meinem Ubuntu 10.04-Computer Emacs 23.1.

Zusätzlich: In einem hinterhältigen Schritt möchte ich eine weitere Frage im Hexl-Modus hinzufügen, die nicht direkt mit der im Titel formulierten Frage zusammenhängt, aber Teil des vollständigen Problems ist, mit dem ich konfrontiert bin: Es wäre sehr nützlich für mich, wenn Ich könnte X hexadezimale Zeichen pro Zeile anzeigen, wobei sich X offensichtlich mit dem Format der Binärdatei ändert, die ich bearbeite. Ich konnte im Hexl-Modus keine Möglichkeit finden, dies zu tun, und dachte, ich werde die Frage hier stellen.

Mcradle
quelle

Antworten:

9

Im Hexl-Modus können Sie keine Zeichen löschen. Diese Antwort aus dem Stapelüberlauf schlägt eine Problemumgehung vor: Überschreiben Sie die zu löschenden Zeichen mit einem anderen Zeichen (z. B. "X"), verlassen Sie den Hexl-Modus, suchen Sie die Zeichen und löschen Sie sie dort.

Anne
quelle
3

Verwenden Sie den nhexl-Modus (der als Paket von ELPA installiert werden kann). Der Nhexl-Modus ist ein Nebenmodus. Der Text kann im Hauptmodus, in dem sich der Puffer bereits befand, bearbeitet werden.

Standardmäßig aktiviert der Nhexl-Modus den Überschreibmodus, Sie können ihn jedoch weiterhin löschen. Deaktivieren Sie zum Einfügen von Text den Überschreibmodus mit M-x binary-overwrite-mode.

Sie können das folgende Code-Snippet in Ihre Init-Datei ( ~/.emacs) Inserteinfügen , um den Schlüssel an den umschaltbaren Überschreibmodus im Nhexl-Modus zu binden .

(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)

Dies kann auch von Interesse sein, wenn Sie den nhexl-Modus verwenden.

Gilles 'SO - hör auf böse zu sein'
quelle