Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". Редактирование бинарных файлов

Иногда приходится открывать двоичный/бинарный файл, который содержит что-то не текстовое. Причины разные. У Вима есть специальный режим на этот случай...

Всем привет, сегодня мы обсудим редактирование нетекстовых (бинарных, двоичных) файлов.

Оглавление рубрики

Иногда приходится открывать двоичный/бинарный файл, который содержит что-то не текстовое. Причины разные. Может быть, вам надо найти и изменить текстовую вставку, дату, например. Или заменить какие-то байты в файле данных ли исполняемом, ну, это уже хакерские штучки. Согласен, нечасто такое надо, но лучше знать, как это делается.

Вим способен редактировать двоичные файлы. Если вы открываете Вим из командной строки вместе с файлом, задайте ключ -b. Если открываете файл из Вим, то выставьте ДО открытия binary (:set binary). ДО открытия файла, иначе символ новой строки будет заменен на <CR> с непредсказуемыми последствиями: вы каким-то образом поменяете часть данных!

Обычно Вим добавляет <CR> в конец файла если его там нет. Опция binary это предотвращает.

При редактировании исполняемого бинарника число символов не должно меняться, так что используйте только режим замены (R и r) - если знаете, что делаете.

Строки могут быть длинными, так как символ <CR> в бинарнике не обязан часто встречаться. Используйте set wrap. Для больших бинарников можно нарваться на нехватку памяти из-за слишком длинных строк. Нуль-символ изображается ^@. Ввести его можно так:

<C-V> <C-@> или <C-K> 000

Давайте посмотрим детально, что делает флаг binary.

Переменная textwidth выставляется в ноль, что означает отключение автоматиеского переноса строк (а если ее задать, например, 80, то строки будут переноситься где-то в районе этой длины).

Переменная wrapmargin тоже обнуляется. Она показывает, как далеко от правого края делать переносы. Для двоичных файлов опасна, понятно.

Флаг modeline выключен.

Флаг expandtab тоже: иначе табуляции могут заменяться на пробелы.

Опции для формата файла и кодировки игнорируются.

Кусок файла в формате PNG.
Кусок файла в формате PNG.

Путеводитель по каналу