Vim peut-il afficher uniquement des caractères ASCII et traiter les autres octets comme des données binaires?

13

Je sais déjà vim -b, cependant, selon les paramètres régionaux utilisés, il affiche les caractères multi-octets (comme UTF-8) sous forme de lettres simples.

Comment puis-je demander vimd'afficher uniquement les caractères imprimables ASCII et de traiter le reste comme des données binaires, quel que soit le jeu de caractères?

Totor
la source

Réponses:

18

Lors de l'utilisation vim -b, cela affiche tous les caractères élevés comme <xx>:

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

Tout encodage à un octet fonctionnera, vim utilise ASCII pour tous les caractères inférieurs et les a codés en dur comme imprimables. Le réglage isprintsur vide marquera tout le reste comme non imprimable. Le réglage uhexles affichera en hexadécimal.

Voici comment l'affichage change après chaque commande:

avant après avoir défini l'encodage après avoir défini isprint après avoir mis uhex

pascal
la source
Ces options ne dépendent pas -b, cela ne fera que définir quelques autres options, voir :help edit-binary. Je ne vois pas de différence dans la façon dont les octets non imprimables sont affichés (il montre aussi NUL sans -bgénéralement). Je n'utilise généralement pas -b, car j'utilise ces options pour vérifier les codages étranges dans les fichiers texte.
pascal
Très pratique, je vais l'utiliser lors du collage de Word en texte. Ces commandes peuvent également être mises sur une seule ligne:set encoding=latin1|set isprint=|set display+=uhex
Philip Kearns
1

Cela ressemble à ce que vous recherchez. Cette astuce du vimwiki intitulée: Forcer UTF-8 Vim à lire Latin1 comme Latin1 .

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

En outre de vim« s :helpvous pouvez le faire pour voir plus sur encodages.

:help enc

extrait :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
la source
3
C'est plutôt sympa, mais j'aimerais " vimafficher uniquement les caractères imprimables ASCII", et votre solution utilise le jeu de caractères latin1 (c'est-à-dire ISO-8859-1, un sur-ensemble d'ASCII), il affichera donc des caractères tels que ceux que éje '' je préfère être affiché comme <e9>.
Totor