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

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

Ich habe eine ziemlich große Binärdatei (einige Dutzend MB) und würde gerne irgendwo in der Mitte ein paar KB entfernen. Es handelt sich dabei um eingeklemmte Daten, nicht um den Anfang oder das Ende.

Idealerweise würde ich gerne Emacs verwenden und der Hexl-Modus scheint ein wahrscheinlicher Kandidat.

Ist es möglich, eine Zeile aus dem Hexl-Puffer zu löschen? Ctrlkscheint nicht zu funktionieren. Ich schaue mir den Code gerne an, aber aus irgendeinem Grund finde ich bei der Suche nach hexl-mode.el nur die kompilierte .elc-Datei auf meinem Ubuntu 10.04-Rechner Emacs 23.1.

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

Antwort1

Im Hexl-Modus können Sie keine Zeichen löschen.Diese Antwortvon Stack Overflow wird ein Workaround vorgeschlagen: Überschreiben Sie die Zeichen, die Sie löschen möchten, mit einem anderen Zeichen (sagen wir „X“), wechseln Sie aus dem Hexl-Modus, suchen Sie die Zeichen und löschen Sie sie dort.

Antwort2

VerwendenNHEXL-Modus(kann als Paket von ELPA installiert werden). Nhexl-Modus ist ein Nebenmodus; der Text bleibt im Hauptmodus editierbar, in dem sich der Puffer bereits befand.

Standardmäßig aktiviert nhexl-mode den Überschreibmodus, Sie können aber trotzdem löschen. Um Text einzufügen, deaktivieren Sie den Überschreibmodus mit M-x binary-overwrite-mode.

Sie können den folgenden Codeausschnitt in Ihre Init-Datei ( ~/.emacs) einfügen, um die InsertTaste zum Umschalten des Ü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)

Daskönnte auch von Interesse sein, wenn Sie den NHEXL-Modus verwenden.

verwandte Informationen