Найпростіший спосіб - використовувати binary
варіант. Від :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.
Якщо цього не зробити, а ваше середовище використовує багатобайтове кодування (наприклад, UTF-8, як це використовується більшість людей), Vim намагається кодувати текст як такий, що зазвичай призводить до пошкодження файлу.
Ви можете перевірити це, відкривши файл і просто скориставшись :w
. Зараз це змінено.
Якщо ви встановили LANG
і LC_ALL
в C
(ASCII), Вім нічого не конвертувати і файли залишаються тими ж (він все ще додає символ нового рядка, хоча) , так як Vim не потрібно буде робити якісь - або багатобайтове кодування.
Я особисто також вважаю за краще відключити set wrap
бінарне, хоча інші, можливо, вважають за краще це ввімкнути . YMMV. Ще одна корисна річ - це :set display=uhex
. Від :help 'display'
:
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
І як остання порада, ви можете показати шістнадцяткове значення символу під курсором у лінійці з %B
( :set rulerformat=0x%B
).
Більш просунуті: xxd
Ви можете використовувати xxd(1)
інструмент для перетворення файлу у більш читабельний формат і (це важливий біт), проаналізуйте відредагований "читабельний формат" та запишіть його назад як бінарні дані. xxd
є частиною vim
, тому якщо ви vim
встановили, ви також повинні мати це xxd
.
Щоб використовувати його:
$ xxd /bin/ls | vi -
Або якщо ви вже відкрили файл, ви можете використовувати:
:%!xxd
Тепер внесіть зміни, вам потрібно зробити це в лівій частині дисплея (шістнадцяткові номери), зміни в правій частині (зображення для друку) ігноруються під час запису.
Щоб зберегти його, використовуйте xxd -r
:
:%!xxd -r > new-ls
Це збереже файл у new-ls
.
Або завантажити двійковий файл у поточний буфер:
:%!xxd -r
Від 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.
А потім просто використовуйте :w
для його написання. ( будьте обережні : ви хочете встановити binary
параметр перед тим, як записати у файл, з тих самих причин, як описано вище).
Додаткові клавіші, щоб зробити це трохи простіше:
" 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>
Це також доступне в меню, якщо ви використовуєте gVim, у розділі "Інструменти ➙ Перетворити в HEX" та "Інструменти ➙ Перетворити назад".
У вікі-підказках vim є сторінка з додатковою інформацією та деякими допоміжними сценаріями. Особисто я думаю, вам, мабуть, краще використовувати справжній шестигранний редактор, якщо ви часто редагуєте двійкові файли. Vim може
якось виконати цю роботу, але вона, очевидно, не призначена для цього, і якщо ви коли-небудь пишете без :set binary
Vim, це може знищити ваші бінарні файли!