Am einfachsten ist es, die binary
Option zu verwenden. Von :help binary
:
This option should be set before editing a binary file. You can also
use the -b Vim argument. When this option is switched on a few
options will be changed (also when it already was on):
'textwidth' will be set to 0
'wrapmargin' will be set to 0
'modeline' will be off
'expandtab' will be off
Also, 'fileformat' and 'fileformats' options will not be used, the
file is read and written like 'fileformat' was "unix" (a single <NL>
separates lines).
The 'fileencoding' and 'fileencodings' options will not be used, the
file is read without conversion.
[..]
When writing a file the <EOL> for the last line is only written if
there was one in the original file (normally Vim appends an <EOL> to
the last line if there is none; this would make the file longer). See
the 'endofline' option.
Wenn Sie dies nicht tun und Ihre Umgebung eine Multibyte-Codierung verwendet (z. B. UTF-8, wie es die meisten Leute verwenden), versucht Vim, den Text als solchen zu codieren, was normalerweise zu Dateibeschädigungen führt.
Sie können dies überprüfen, indem Sie eine Datei öffnen und einfach verwenden :w
. Es ist jetzt geändert.
Wenn Sie LANG
und LC_ALL
auf C
(ASCII) setzen, konvertiert Vim nichts und die Dateien bleiben gleich (es wird jedoch immer noch ein Zeilenumbruch eingefügt), da Vim keine Multibyte-Codierung durchführen muss.
Ich persönlich bevorzuge auch die Deaktivierung set wrap
für Binärdateien, obwohl andere es vielleicht vorziehen, sie zu aktivieren . YMMV. Eine weitere nützliche Sache ist :set display=uhex
. Von :help 'display'
:
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
Und als letzten Tipp können Sie den Hex-Wert des Zeichens unter dem Cursor im Lineal mit %B
( :set rulerformat=0x%B
) anzeigen .
Fortgeschrittener: xxd
Mit dem xxd(1)
Tool können Sie eine Datei in ein besser lesbares Format konvertieren und (dies ist das wichtige Bit) das bearbeitete "lesbare Format" analysieren und als Binärdaten zurückschreiben. xxd
ist ein Teil von vim
, also wenn Sie vim
installiert haben, sollten Sie auch haben xxd
.
Um es zu benutzen:
$ xxd /bin/ls | vi -
Wenn Sie die Datei bereits geöffnet haben, können Sie Folgendes verwenden:
:%!xxd
Nehmen Sie nun Ihre Änderungen vor, Sie müssen dies auf der linken Seite des Displays tun (die Hex-Zahlen), Änderungen auf der rechten Seite (druckbare Darstellung) werden beim Schreiben ignoriert.
Verwenden Sie zum Speichern Folgendes xxd -r
:
:%!xxd -r > new-ls
Dadurch wird die Datei in gespeichert new-ls
.
Oder um die Binärdatei in den aktuellen Puffer zu laden:
:%!xxd -r
Von xxd(1)
:
-r | -revert
reverse operation: convert (or patch) hexdump into binary. If
not writing to stdout, xxd writes into its output file without
truncating it. Use the combination -r -p to read plain hexadeci‐
mal dumps without line number information and without a particu‐
lar column layout. Additional Whitespace and line-breaks are
allowed anywhere.
Und dann benutze :w
es einfach , um es zu schreiben. ( Achtung : Sie möchten die binary
Option vor dem Schreiben in die Datei aus denselben Gründen wie oben festlegen ).
Komplementäre Tastenkombinationen, um dies ein bisschen einfacher zu machen:
" Hex read
nmap <Leader>hr :%!xxd<CR> :set filetype=xxd<CR>
" Hex write
nmap <Leader>hw :%!xxd -r<CR> :set binary<CR> :set filetype=<CR>
Dies ist auch über das Menü verfügbar, wenn Sie gVim verwenden, und zwar unter "Extras"> "In HEX konvertieren" und "Extras"> "Zurück konvertieren".
Das Vim Tips Wiki hat eine Seite mit mehr Informationen und einigen Hilfsskripten. Persönlich denke ich, dass Sie mit einem echten Hex-Editor wahrscheinlich besser dran sind, wenn Sie so oft Binärdateien bearbeiten. Vim kann
die Arbeit erledigen, aber es ist offensichtlich nicht dafür ausgelegt, und wenn Sie jemals ohne :set binary
Vim schreiben , können Ihre Binärdateien zerstört werden!
:set binary noeol fenc=utf-8
. Tatsächlich wird dies sofort beim Öffnen der Datei ausgeführt, bevor die Meldung erscheint[noeol] [converted]
. Warum muss vim den Puffer 150% größer machen? Wie verhindere ich, dass solche Dateien beschädigt werden?:r !xxd <file>
(oder$ xxd <file> | vim -
) zu lesen und:w !xxd -r > <file>
zu schreiben, aber das ist nicht ideal.Um den Inhalt einer Binärdatei in einer Hex-Ansicht anzuzeigen, öffnen Sie die Datei, aktivieren Sie den Binärmodus und filtern Sie den Puffer mithilfe des
xxd
Befehls:Sie können Änderungen im linken Bereich vornehmen (die Hex-Zahlen bearbeiten) und, wenn Sie fertig sind,
xxd -r
die Datei filtern und schließlich speichern:Wenn der Filterschritt nach dem Öffnen und vor dem Schließen mühsam klingt und Sie dies häufig mit Dateien mit der
.bin
Erweiterung tun , können Sie dies zu Ihrem vimrc hinzufügen, um den Prozess automatisch zu machen:quelle
:%!xxd
,:%!xxd -r
,:w
, nur knapp sein Ziel Änderungen vornehmen!) , Dann die Binärdatei geschrieben ist nicht das gleiche wie das Original ... Ist dies der Fall für Sie (ich getestet/bin/ls
). Ich muss:set binary
vor dem Speichern verwenden (siehe auch meine Antwort, die erklärt, warum) ... Vielleicht ist es etwas in meinem vimrc? Aber egal, ich würde immerset binary
für die Sicherheit verwenden ...augroup
Skript hinzufügen ,~/.vim/plugin/binary.vim
wenn Sie nicht möchten, dass Ihre.vimrc
augroup Binary
sich die Auflistung am befindet:help hex-editing
oder:help using-xxd
in einem der Vim seit 5.5 (September 1999).Verwenden Sie den "bvi" -Editor. http://bvi.sourceforge.net/ (Es ist in jedem Linux-Repository.)
quelle
TL; DR Antwort
Öffnen Sie die Datei mit Vim im Binärmodus:
Gehen Sie in Vim wie folgt in den Hex-Bearbeitungsmodus:
Speichern:
Dadurch wird der Puffer wieder aus dem Hex-Modus konvertiert und die Datei wie gewohnt gespeichert.
Beachten Sie die Option -p. Dies vermeidet alle zusätzlichen Druck- und Adressflusen und zeigt Ihnen nur das Hex. Lassen Sie -p einfach weg, wenn Sie den zusätzlichen Kontext wünschen.
Öffnen Sie die Datei mit Vim nicht im Binärmodus, da beim Speichern ein (normalerweise nicht beabsichtigtes) LF-Zeichen an das Ende der Datei angehängt wird.
quelle
:h using-xxd
und ist seitv7.0001
und wahrscheinlich länger da. Diese Seite wäre weniger aktiv, wenn Leute die Dokumente durchsuchen würden.Dies sieht aus wie ein handliches kleines VIM-Plugin, das die Arbeit mit einer temporären Datei erledigt, die es automatisch für Sie hin und her schreibt.
Vor einigen Jahren habe ich ein ähnliches Plugin gefunden, das ich für meinen eigenen Gebrauch angepasst und verbessert habe. Ich habe hier den entsprechenden Code eingefügt, falls jemand dies wünscht. Es basiert ebenfalls auf dem Tool xxd. Ich bin mir sicher, dass die GitHub-Version, die ich oben verlinkt habe, besser funktioniert, aber ich habe sie selbst nicht verwendet. Ich dachte, ich würde auch diese veröffentlichen, von der ich sicher weiß, dass sie funktioniert.
Die Quelle für diese andere Version war das Vim-Wiki, speziell diese Seite .
Hier ist der Code:
quelle