Может ли vim отображать только символы ASCII и обрабатывать другие байты как двоичные данные?

13

Я уже знаю vim -b, однако, в зависимости от используемой локали, он отображает многобайтовые символы (например, UTF-8) в виде отдельных букв.

Как я могу попросить vimотображать только печатные символы ASCII и обрабатывать остальные как двоичные данные, независимо от кодировки?

Totor
источник

Ответы:

18

При использовании vim -bэто отображает все старшие символы как <xx>:

set encoding=latin1
set isprint=
set display+=uhex

Подойдет любая однобайтовая кодировка, vim использует ASCII для всех нижних символов и жестко кодирует их для печати. Установка isprintпустым пометит все остальное как не для печати. Настройка uhexбудет отображать их как шестнадцатеричные.

Вот как меняется дисплей после каждой команды:

перед после настройки кодировки после настройки isprint после настройки uhex

паскаль
источник
Эти параметры не зависят от того -b, что просто задаст несколько других параметров, смотрите :help edit-binary. Я не вижу разницы в том, как отображаются непечатаемые байты ( -bобычно это показывает NUL без ). Я в основном не использую -b, потому что я использую эти опции для проверки странных кодировок в текстовых файлах.
Паскаль
Очень удобно, я собираюсь использовать его при вставке из Word в текст. Эти команды также могут быть помещены в одну строку:set encoding=latin1|set isprint=|set display+=uhex
Philip Kearns
1

Это звучит как то, что вы ищете. Этот совет из vimвики под названием: Принудительное использование UTF-8 Vim для чтения Latin1 как Latin1 .

$ vim -c "e ++enc=latin1" file.txt

Кроме того, из vim«S :helpвы можете сделать это , чтобы увидеть больше кодировок.

:help enc

выдержка из :help enc

'encoding' 'enc'        string (default: "latin1" or value from $LANG)
                        global
                        {only available when compiled with the +multi_byte
                        feature}
                        {not in Vi}
    Sets the character encoding used inside Vim.  It applies to text in
    the buffers, registers, Strings in expressions, text stored in the
    viminfo file, etc.  It sets the kind of characters which Vim can work
    with.  See encoding-names for the possible values.

    NOTE: Changing this option will not change the encoding of the
    existing text in Vim.  It may cause non-ASCII text to become invalid.
    It should normally be kept at its default value, or set when Vim
    starts up.  See multibyte.  To reload the menus see :menutrans.

    This option cannot be set from a modeline.  It would most likely
    corrupt the text.

    NOTE: For GTK+ 2 it is highly recommended to set 'encoding' to
    "utf-8".  Although care has been taken to allow different values of
    'encoding', "utf-8" is the natural choice for the environment and
    avoids unnecessary conversion overhead.  "utf-8" has not been made
    the default to prevent different behavior of the GUI and terminal
    versions, and to avoid changing the encoding of newly created files
    without your knowledge (in case 'fileencodings' is empty).
    ...
    ...
SLM
источник
3
Это довольно хорошо, но я бы хотел « vimотображать только печатаемые символы ASCII», и ваше решение использует набор символов latin1 (то есть ISO-8859-1, расширенный набор ASCII), поэтому он будет отображать такие символы, éкоторые я Я предпочел бы отображаться как <e9>.
Тотор