Bisakah vim menampilkan karakter ASCII saja, dan memperlakukan byte lain sebagai data biner?

13

Saya sudah tahu vim -b, bagaimanapun, tergantung pada lokal yang digunakan, ini menampilkan karakter multi-byte (seperti UTF-8) sebagai huruf tunggal.

Bagaimana saya bisa meminta vimuntuk hanya menampilkan karakter ASCII yang dapat dicetak, dan memperlakukan sisanya sebagai data biner, tidak peduli charset?

Totor
sumber

Jawaban:

18

Saat menggunakan vim -b, ini menampilkan semua karakter tinggi sebagai <xx>:

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

Pengodean byte tunggal apa pun akan berfungsi, vim menggunakan ASCII untuk semua karakter yang lebih rendah dan meminta kode tersebut dicetak sebagai kode. Pengaturan isprintuntuk mengosongkan akan menandai semua yang lain sebagai tidak dapat dicetak. Pengaturan uhexakan menampilkannya sebagai heksadesimal.

Berikut adalah tampilan yang berubah setelah setiap perintah:

sebelum setelah mengatur penyandian setelah pengaturan isprint setelah mengatur uhex

pascal
sumber
Opsi ini tidak bergantung pada -b, itu hanya akan menetapkan beberapa opsi lain, lihat :help edit-binary. Saya tidak melihat perbedaan dalam bagaimana byte yang tidak dapat dicetak ditampilkan (ini menunjukkan NUL tanpa -bbiasanya juga). Saya kebanyakan tidak menggunakan -b, karena saya menggunakan opsi ini untuk memeriksa pengkodean aneh dalam file teks.
pascal
Sangat berguna, saya akan menggunakannya ketika menempelkan dari Word ke teks. Perintah-perintah itu juga dapat dimasukkan ke dalam satu baris:set encoding=latin1|set isprint=|set display+=uhex
Philip Kearns
1

Ini terdengar seperti apa yang Anda cari. Tip ini dari vimwiki berjudul: Memaksa UTF-8 Vim untuk membaca Latin1 sebagai Latin1 .

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

Juga dari vim's :helpAnda dapat melakukan ini untuk melihat lebih lanjut tentang pengkodean.

:help enc

kutipan dari :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
sumber
3
Itu cukup bagus, tetapi saya ingin " vimhanya menampilkan karakter ASCII yang dapat dicetak", dan solusi Anda menggunakan charset latin1 (yaitu ISO-8859-1, superset ASCII), sehingga akan menampilkan karakter seperti éyang saya ' d suka ditampilkan <e9>.
Totor