Cara paling sederhana adalah dengan menggunakan binary
opsi. Dari :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.
Jika Anda tidak melakukan ini, dan lingkungan Anda menggunakan pengkodean multibyte (misalnya UTF-8, seperti yang digunakan kebanyakan orang), Vim mencoba menyandikan teks seperti itu, biasanya mengarah ke file korupsi.
Anda dapat memverifikasi ini dengan membuka file, dan hanya menggunakan :w
. Sekarang sudah berubah.
Jika Anda mengatur LANG
dan LC_ALL
ke C
(ASCII), Vim tidak mengonversi apa pun dan file tetap sama (tetap menambahkan baris baru) karena Vim tidak perlu melakukan pengkodean multibyte apa pun.
Saya pribadi juga lebih memilih untuk menonaktifkan set wrap
biner, meskipun orang lain mungkin lebih suka mengaktifkannya . YMMV. Hal lain yang bermanfaat untuk dilakukan adalah :set display=uhex
. Dari :help 'display'
:
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
Dan sebagai tip terakhir, Anda dapat menunjukkan nilai hex karakter di bawah kursor dalam penggaris dengan %B
( :set rulerformat=0x%B
).
Lebih maju: xxd
Anda dapat menggunakan xxd(1)
alat ini untuk mengonversi file ke format yang lebih mudah dibaca, dan (ini adalah bagian penting), parsing "format yang dapat dibaca" yang diedit dan tulis kembali sebagai data biner. xxd
adalah bagian dari vim
, jadi jika Anda telah vim
menginstal Anda juga harus memiliki xxd
.
Untuk menggunakannya:
$ xxd /bin/ls | vi -
Atau jika Anda sudah membuka file, Anda dapat menggunakan:
:%!xxd
Sekarang buat perubahan Anda, Anda perlu melakukan itu di sisi kiri layar (angka hex), perubahan ke sisi kanan (representasi yang dapat dicetak) diabaikan saat menulis.
Untuk menyimpannya, gunakan xxd -r
:
:%!xxd -r > new-ls
Ini akan menyimpan file new-ls
.
Atau untuk memuat biner di buffer saat ini:
:%!xxd -r
Dari 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.
Dan kemudian gunakan :w
untuk menulisnya. ( hati-hati : Anda ingin mengatur binary
opsi sebelum menulis ke file, untuk alasan yang sama menguraikan di atas).
Ikatan pelengkap untuk membuatnya lebih mudah:
" 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>
Ini juga tersedia dari menu jika Anda menggunakan gVim, di bawah 'Alat ➙ Konversi ke HEX' dan 'Alat ➙ Konversi kembali'.
The kiat vim wiki memiliki halaman dengan informasi lebih lanjut dan beberapa skrip pembantu. Secara pribadi, saya pikir Anda mungkin lebih baik menggunakan hex editor nyata jika Anda sering mengedit file biner. Vim dapat
melakukan pekerjaan itu, tetapi jelas tidak dirancang untuk itu, dan jika Anda pernah menulis tanpa :set binary
Vim dapat merusak file biner Anda!