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!