Cara melihat Karakter UTF-8 di VIM atau Gvim

106

Saya mengerjakan halaman web yang melibatkan skrip Non-Inggris dari waktu ke waktu, kebanyakan dari mereka menggunakan utf-8 charset, VIM dan Gvim tidak menampilkan Karakter UTF-8 dengan benar.

Menggunakan VIM 7.3.46 di windows 7 64 bit, dengan set guifont=Monaco:h10di _vimrc

Apakah ada cara untuk memperbaikinya?

Pembaruan: Saya telah mencari- set guifontwidecari di Google dan menemukan tindakan sebagai pengganti kedua untuk bahasa daerah.

Saya menambahkan baris berikut di _vimrc dan sebagian besar masalah saya terpecahkan.

set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12

Font NSimsun di atas berfungsi untuk bahasa Cina, Masalahnya adalah saya tidak tahu bagaimana mereka mendapatkan nama font untuk bekerja dengan VIM, Courier Newdisebutkan Courier_Newjuga NSimsuntidak ada di direktori font. Font yang ingin saya gunakan adalah LathaTapi, saya tidak tahu bagaimana menggunakannya di File _vimrc. set guifontwide=latha:h12atau set guifontwide=Latha:h12tidak bekerja.

Jika saya berhasil mengatur guifontwideke latha, maka masalah saya akan terpecahkan, Bagaimana cara melakukannya?

Sathish Manohar
sumber
apa nilai 'guifont'dan nilainya 'guifontwide'? Juga, OS apa yang Anda gunakan dan versi vim apa?
Benoit
Sathish, apakah Anda dapat menemukan solusi untuk ini? Saya mencoba mengetik gVim dengan perangkat lunak eKalappai tetapi vim hanya menampilkan saya ?? karakter (ternyata menyimpannya dengan cara yang sama).
sundar - Kembalikan Monica
@sundar Tidak. Aku menyerah: |
Sathish Manohar
Masalah saya adalah inconsolata-g tidak mendukung karakter utf-8 dalam dokumen saya.
AndrewPK
Saya set guifontwide=NSimsun:h12gagal menggunakan , mengatakan "Font lebar tidak valid" mungkin merupakan masalah non-monospace yang sama?
mikew

Jawaban:

61

Coba muat ulang dokumen menggunakan:

:e! ++enc=utf8

Jika berhasil, Anda mungkin harus mengubah fileencodingspengaturan di .vimrc Anda.

Benoit
sumber
2
Tidak mengubah apa pun untuk saya
Thomas Levesque
8
JANGAN menjalankan ini sebelum menyimpan pekerjaan Anda karena ini akan menghapus perubahan yang telah Anda buat. :uakan menyelamatkanmu.
Ini juga menyetel file menjadi hanya baca ketika Anda melakukan ini, jadi Anda juga perlu menjalankan:set noro
Matt Vukomanovic
2
Terima kasih untuk ini. Vim tidak merender utf-8 dalam kasus saya karena saya memiliki blok data biner (bagian lampiran multipart / form-data). Ketika saya melakukannya :e! ++enc=utf8, itu membuat utf-8, tetapi mengeluh [ILLEGAL BYTE in line 286](baris bagian biner pertama) di dalam file. Saya menduga perilaku default adalah kembali diam-diam ke beberapa pengkodean lain ketika ini terjadi pada pembukaan Vim. Untuk beberapa alasan, bagaimanapun, echo &encmasih melaporkan utf-8 dalam kasus itu.
Dmitry Minkovsky
1
@DmitryMinkovsky, &encadalah encoding vim yang digunakan secara internal untuk menyimpan konten buffer. Pengaturan yang berisi pengkodean untuk file saat ini adalah&fenc
Benoit
60

Apakah Anda mencoba

:set encoding=utf-8
:set fileencoding=utf-8

?

Maxim Sloyko
sumber
5
Saya sudah mencoba dengan kedua pengaturan ini, dan masih tidak bisa melihat karakter utf-8.
Sathish Manohar
1
-1. Sebenarnya ini tidak bisa berhasil. Tak satu pun dari opsi ini yang akan memuat ulang file. Yang pertama akan memodifikasi bagaimana vim menyimpan buffer (dan hal-hal lain) secara internal, yang kedua akan menentukan bahwa Anda ingin mengubah pengkodean file yang sudah dimuat dalam buffer, yang akan diterapkan saat menyimpannya.
Benoit
:set encoding=utf8 AKAN menyegarkan buffer dan jika masalahnya ada dalam pengkodean yang salah, itu akan memperbaikinya. Saya menambahkan set fileencoding=utf8opsi sehingga Anda tidak akan mengalami kesalahan "Tidak dapat mengonversi beberapa karakter" yang paling membingungkan saat menyimpan.
Maxim Sloyko
set encoding berhasil. Saya menambahkan set encoding = utf8 ke file .vimrc dan sekarang semuanya baik-baik saja dengan utf8.
Alexander Kim
Di OSX, saya telah menambahkan dua baris ini (tanpa titik dua) ke saya ~/.vimrcdan itu berfungsi dengan baik
lionello
7

Jika orang Jepang datang ke sini, tambahkan baris berikut ke Anda ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
kujiy
sumber
6

Di Microsoft Windows, gvim tidak mengizinkan Anda untuk memilih font non-spasial. Sayangnya Latha adalah font non-monospace.

Ada cara hack untuk mewujudkannya: Menggunakan FontForge (Anda dapat mengunduh biner Windows dari http://www.geocities.jp/meir000/fontforge/ ) untuk mengedit Latha.ttf dan menandainya sebagai font monospace. Melakukan seperti ini:

  1. Muat fontforge, pilih latha.ttf.
  2. Menu: Elemen -> Info Font
  3. Pilih "OS / 2" dari daftar sebelah kiri pada dialog Info Font
  4. Pilih tab "Panose"
  5. Set Proportion = Monospace
  6. Simpan versi TTF baru dari font ini, cobalah!

Semoga berhasil!

Yi Zhao
sumber
1
Saya tidak bisa mengubah font latha menjadi monospace. Saya mengikuti langkah Anda dengan tepat tetapi file yang disimpan masih tidak berfungsi sebagai font monospace :(
Sathish Manohar
1
@Sathish Manohar 1) menimpa file TTF yang ada, mulai ulang Windows Anda, dan coba. atau 2) Anda dapat menyimpan TTF ke file baru dan mengubah nama font. Instal file TTF baru. Font baru ini seharusnya tersedia di daftar Anda.
Yi Zhao
Setelah bertahun-tahun (7 tahun) kemudian, ada beberapa font gratis yang tersedia untuk VIM. Font Google Noto google.com/get/noto ; dan Iosveka github.com/be5invis/Iosevka/releases adalah alternatif yang sangat baik untuk dievaluasi.
Yi Zhao
3

Di Linux, Buka file konfigurasi VIM

$ sudo -H gedit /etc/vim/vimrc

Menambahkan baris berikut:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

Simpan dan keluar, dan perintah terminal:

$ source /etc/vim/vimrc

Saat ini VIM akan menampilkan bahasa Mandarin dengan benar.

Paul Chen
sumber
2

Apakah masalah ini sudah terpecahkan?

Saya mendapat masalah bahwa gvim tidak menampilkan semua karakter unicode (tetapi hanya sebagian, termasuk umlaut dan karakter beraksen), sementara :set guifont?kosong; lihat pertanyaan saya . Setelah membaca di sini, menyetel guifontke nilai yang masuk akal memperbaikinya untuk saya. Namun, saya tidak membutuhkan karakter lebih dari 2 byte.

Tobias
sumber
1
Apa nilai yang masuk akal untuk guifont? Apa yang kamu masukkan?
Christian
Saya mencantumkan nilai-nilai yang berhasil bagi saya dalam jawaban ini .
Tobias
2

Saya tidak bisa mendapatkan font lain yang saya instal untuk muncul di editor Windows GVim saya, jadi saya hanya beralih ke Lucida Consoleyang memiliki setidaknya dukungan UTF-8 yang lebih baik. Tambahkan ini ke akhir Anda _vimrc:

" For making everything utf-8
set enc=utf-8
set guifont=Lucida_Console:h9:cANSI
set guifontwide=Lucida_Console:h12

Sekarang saya melihat setidaknya beberapa karakter UTF-8.

Ryan Shillington
sumber
dalam kasus saya cANSI harus diubah menjadi cGREEK (Edit -> Pilih Font ... di GVim), dengan font Consolas, untuk menampilkan file teks
berenkode
1

Pada gvim Windows cukup pilih font "Konsol Lucida".

Alex Dvoretskiy
sumber