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

4929
Mcradle

Ich habe eine ziemlich große Binärdatei (einige Dutzend MB) und möchte ein paar KB irgendwo in der Mitte entfernen. Es sind Daten, die weder den Anfang noch das Ende enthalten.

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

Kann man eine Zeile aus dem Hexl-Puffer löschen? Ctrl- kscheint die Arbeit nicht zu machen. Ich schaue mir den Code gerne an, aber aus irgendeinem Grund suche ich nach hexl-mode.el. Alles, was ich finde, ist die kompilierte .elc-Datei auf meiner Ubuntu 10.04-Maschine Emacs 23.1.

Außerdem: In einer hinterlistigen Bewegung möchte ich eine weitere Hexl-Modus-Frage hinzufügen, die nicht direkt mit der im Titel formulierten Frage zusammenhängt, aber Teil des gesamten Problems ist, dem ich gegenüberstehe: Es wäre für mich sehr nützlich, wenn Ich könnte X-Hexadezimalzeichen pro Zeile anzeigen, wobei X sich offensichtlich mit dem Format der Binärdatei, die ich bearbeite, ändert. Ich konnte keinen Weg finden, dies im Hexl-Modus zu tun, und dachte, ich würde die Frage hier werfen.

10

2 Antworten auf die Frage

7
Anne

Hexl mode does not allow you to delete characters. This answer from stack overflow suggests a workaround: overwrite the characters you want to delete with another character (say "X"), switch out of hexl mode, find the characters and delete them there.

2
Gilles

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

Standardmäßig wird im nhexl-Modus der Überschreibmodus aktiviert. Sie können ihn jedoch weiterhin löschen. Um einen Text einzufügen, deaktivieren Sie 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 mit dem Umschaltmodus für den Überschreibmodus im nhexl-Modus zu verbinden.

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