Ketika Vim membaca file yang sudah ada, ia mencoba mendeteksi encoding file. Saat menulis file, Vim menggunakan pengkodean file yang terdeteksi (kecuali jika Anda memberi tahu secara berbeda). Jadi file yang terdeteksi sebagai UTF-8 ditulis sebagai UTF-8, file yang terdeteksi sebagai Latin-1 ditulis sebagai Latin-1, dan seterusnya.
Secara default, proses deteksi adalah kasar. Setiap file yang Anda buka dengan Vim akan dianggap Latin-1, kecuali jika mendeteksi tanda byte-order Unicode di bagian atas. File UTF-8 tanpa tanda byte-order akan sulit diedit karena setiap karakter multibyte akan ditampilkan dalam buffer sebagai urutan karakter alih-alih karakter tunggal.
Lebih buruk lagi, Vim, secara default, menggunakan Latin-1 untuk mewakili teks dalam buffer. Jadi file UTF-8 dengan tanda byte-order akan rusak oleh konversi ke Latin-1.
Solusinya adalah mengkonfigurasi Vim untuk menggunakan UTF-8 secara internal. Ini, pada kenyataannya, direkomendasikan dalam dokumentasi Vim, dan satu-satunya alasan ia tidak dikonfigurasikan dengan cara yang keluar dari kotak adalah untuk menghindari menciptakan kebingungan besar di antara pengguna yang mengharapkan Vim untuk beroperasi pada dasarnya sebagai editor Latin-1.
Di Anda .vimrc
, tambahkan set encoding=utf-8
dan mulai ulang Vim.
Atau sebaliknya, atur LANG
variabel lingkungan untuk menunjukkan bahwa UTF-8 adalah pengkodean karakter yang Anda sukai. Ini tidak hanya memengaruhi Vim tetapi juga perangkat lunak apa pun yang bergantung LANG
untuk menentukan bagaimana seharusnya mewakili teks. Misalnya, untuk menunjukkan bahwa teks akan muncul dalam bahasa Inggris ( en
), seperti yang diucapkan di Amerika Serikat ( US
), disandikan sebagai UTF-8 ( utf-8
), atur LANG=en_US.utf-8
.
Sekarang Vim akan menggunakan UTF-8 untuk mewakili teks dalam buffer. Plus, itu juga akan membuat upaya yang lebih bertekad untuk mendeteksi pengkodean UTF-8 dalam file. Selain mencari tanda byte-order, UTF-8 juga akan memeriksa tanpa tanda byte-byte sebelum kembali ke Latin-1. Jadi itu tidak akan lagi merusak file yang dikodekan dalam UTF-8, dan itu harus benar menampilkan karakter UTF-8 selama sesi pengeditan.
Untuk informasi lebih lanjut tentang bagaimana Vim mendeteksi encoding file, lihat yang
fileencodings
pilihan dalam dokumentasi Vim .
Untuk informasi lebih lanjut tentang pengaturan encoding yang Vim menggunakan internal, lihat itu encoding
pilihan .
Jika Anda perlu mengganti pengkodean yang digunakan saat menulis file kembali ke disk, lihat itu fileencoding
pilihan .
.vimrc
; sebenarnya nilai default encoding adalah "latin1" atau nilai dari $ LANG, yang pada sistem saya diatur keen_US.UTF-8
. Untuk alasan ini:set encoding
memberi diencoding=utf-8
luar kotak. Seperti yang diharapkan, jika LANG tidak disetel,:set encoding
beriencoding=latin1
. Terima kasih atas jawaban Anda!