Как трактовать многобайтовые символы просто как последовательность байтов? - PullRequest
0 голосов
/ 10 октября 2019

Я хотел бы использовать 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...