Я хотел бы использовать vim с двоичными файлами. Я запускаю run 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
?