hexl-mode でバイナリファイルの途中からデータを削除する

hexl-mode でバイナリファイルの途中からデータを削除する

かなり大きなバイナリ ファイル (数十 MB) があり、途中の数 KB を削除したいと考えています。これは先頭でも末尾でもなく、挟まれたデータです。

理想的には emacs を使いたいのですが、hexl-mode が候補として考えられます。

hexl バッファから 1 行削除することは可能ですか? Ctrl-kどうやらうまくいかないようです。コードを見るのは楽しいのですが、何らかの理由で hexl-mode.el を探すと、Ubuntu 10.04 マシン Emacs 23.1 でコンパイルされた .elc ファイルしか見つかりません。

さらに、タイトルに書かれている質問とは直接関係ないのですが、私が直面している問題の一部である、もう 1 つの hexl-mode の質問を追加したいと思います。編集中のバイナリ ファイルの形式によって X が明らかに変化する 1 行あたり X 個の 16 進文字を表示できれば非常に便利ですが、hexl-mode でそれを実行する方法が見つからなかったので、ここで質問しようと思いました。

答え1

Hexl モードでは文字を削除できません。この答えStack Overflow では回避策が提案されています。削除したい文字を別の文字 (たとえば「X」) で上書きし、hexl モードを終了して、文字を見つけてそこで削除します。

答え2

使用nhexl モード(ELPA からパッケージとしてインストールできます)。Nhexl-mode はマイナー モードです。テキストは、バッファーが既に存在していたメジャー モードで編集可能なままになります。

デフォルトでは、nhexl-mode は上書きモードを有効にしますが、削除は可能です。テキストを挿入するには、 で上書きモードをオフにしますM-x binary-overwrite-mode

次のコード スニペットを init ファイル ( ~/.emacs)に配置するInsertと、キーを nhexl-mode の上書きモードの切り替えにバインドできます。

(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 を使用する場合にも興味深いかもしれません。

関連情報