web-dev-qa-db-ja.com

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

私はかなり大きなバイナリファイル(数十MB)を持っていて、途中のどこかで数KBを削除したいのですが、それは最初でも最後でもないサンドイッチデータです。

理想的にはemacsを使いたいのですが、hexl-modeが有望な候補のようです。

Hexlバッファーから1行を削除することは可能ですか? Ctrl-k 仕事をしていないようです。コードを見てうれしいですが、何らかの理由でhexl-mode.elを探しているのは、Ubuntu10.04マシンEmacs23.1でコンパイルされた.elcファイルだけです。

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

12
Mcradle

Hexlモードでは、文字を削除できません。 この回答 スタックオーバーフローからの回避策が提案されています:削除する文字を別の文字(「X」など)で上書きし、hexlモードから切り替えて、文字を見つけてそこで削除します。

9
Anne

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

デフォルトでは、nhexl-modeは上書きモードをアクティブにしますが、削除することもできます。テキストを挿入するには、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)

This nhexl-modeを使用する場合にも、興味深いことがあります。