Hexl 모드를 사용하여 바이너리 파일 중간에서 데이터 삭제

Hexl 모드를 사용하여 바이너리 파일 중간에서 데이터 삭제

꽤 큰 바이너리 파일(수십 MB)이 있고 중간 어딘가에서 몇 KB를 제거하고 싶습니다. 시작도 끝도 아닌 데이터가 끼워져 있습니다.

이상적으로는 emacs를 사용하고 싶고 hexl 모드가 적합한 후보인 것 같습니다.

hexl 버퍼에서 한 줄을 삭제할 수 있습니까? Ctrl- k일을 안 하는 것 같아요. 코드를 보게 되어 기쁘지만 어떤 이유로든 hexl-mode.el을 찾는 것은 Ubuntu 10.04 시스템 Emacs 23.1에서 컴파일된 .elc 파일뿐입니다.

추가로: 교활한 움직임으로 제목에 명시된 질문과 직접 ​​관련이 없지만 내가 직면하고 있는 전체 문제의 일부인 또 다른 16진수 모드 질문을 추가하고 싶습니다. 편집 중인 바이너리 파일의 형식에 따라 X가 분명히 변경되는 경우 한 줄에 X개의 16진수 문자를 표시할 수 있습니다. 16진수 모드에서는 그렇게 할 수 있는 방법을 찾을 수 없어서 여기에 질문을 던질 것이라고 생각했습니다.

답변1

Hexl 모드에서는 문자를 삭제할 수 없습니다.이 답변스택 오버플로에서 해결 방법을 제안합니다. 삭제하려는 문자를 다른 문자(예: "X")로 덮어쓰고 16진수 모드에서 전환한 다음 문자를 찾아서 삭제합니다.

답변2

사용nhexl 모드(ELPA에서 패키지로 설치할 수 있음) Nhexl 모드는 마이너 모드입니다. 텍스트는 버퍼가 이미 있던 주요 모드에서 편집 가능한 상태로 유지됩니다.

기본적으로 nhexl-mode는 덮어쓰기 모드를 활성화하지만 여전히 삭제할 수 있습니다. 텍스트를 삽입하려면 를 사용하여 덮어쓰기 모드를 끄십시오 M-x binary-overwrite-mode.

다음 코드 조각을 초기화 파일( ~/.emacs) 에 넣어 Insertnhexl 모드에서 덮어쓰기 모드를 전환하도록 키를 바인딩할 수 있습니다.

(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를 사용하는 경우에도 흥미로울 수 있습니다.

관련 정보