Как рассматривать многобайтовые символы просто как последовательность байтов?
Я хотел бы использовать vim с двоичными файлами. Я бегу, запускаю vim с-b
и я имею isprint =
а также display += uhex
. Я использую следующиеstatusline
:
%<%f\ %h%m%r%=%o\ (0x%06O)\ \ %3.b\ <%02B>\ %7P
поэтому я получаю вывод, содержащий некоторую полезную информацию, такую как смещение байта в файле и текущий символ в шестнадцатеричном формате и т. д. Но у меня возникают проблемы со случайным набором данных, интерпретируемых как многобайтовые символы, которые не позволяют мне получить доступ к внутренним байтам, объединенным с окружением (включая украшение vim) или отображать как.
Конечно, я пробовал открывать файлы с помощью ++enc=latin1
. Однако в моей системе используется кодировка UTF-8, поэтому vim якобы выполняет внутреннее преобразование файла из Latin-1 в UTF-8 и его отображение. У этого есть две проблемы:
- Последовательность
<c3><ac>
отображается какì
, скорее, чемì
, но символы считаются как два байта каждый, поэтому мой%o
и неправильно считает смещения. Это 2 байта в файле, но, очевидно, 4 байта в буфере vim. - Я не знаю почему мой
isprint
игнорируется. Ни один из этих символов не находится между 32 и 126, поэтому они должны отображаться в шестнадцатеричном формате.
Я нашел следующий обходной путь: я установил encoding
к latin1
, но termencoding
к utf-8
. Это достигает того, что я хочу, но нарушает другие вещи, например, когда vim нужно отображать сообщения о состоянии ("новый файл", "изменен" и т. Д.) На моем языке, потому что он также хочет использовать для них кодировку, а они не подходят. Думаю, я мог бы запустить vim вLC_ALL=C
но мне кажется, что я уже прибегаю к слишком многим пакостям. Есть ли способ лучше, т. Е. Без возни сencoding
?