Bagaimana cara menggunakan vim untuk mengonversi file saya ke utf8?

Jawaban:

179

Jika Anda mengedit file yang dikodekan sebagai latin1, Anda akan menemukan bahwa 'pengkodean file' untuk buffer itu disetel ke latin1. Jadi, Anda perlu mengatur pengkodean file secara manual sebelum menyimpan file.

:set fileencoding=utf8
:w myfilename

Perhatikan juga bahwa file UTF8 sering dimulai dengan Byte Order Mark (BOM) yang menunjukkan endianness. The BOM adalah opsional, tetapi beberapa program menggunakannya secara eksklusif untuk menentukan encoding file yang. Dalam kondisi tertentu Vim akan menulis BOM tetapi terkadang tidak. Untuk mengatur BOM secara eksplisit, lakukan ini:

:set bomb

Untuk informasi lebih lanjut :help mbyte-optionsdan :help utf8dan :help bomb.

Eric Johnson
sumber
Instruksi ternyata berfungsi dengan baik, tetapi: 1) utf-8 tidak memiliki endianness (seperti vim help menjelaskan , utf-8 BOM hanya menunjukkan bahwa file tersebut adalah utf-8); 2) Saat Anda membuka file lagi nanti, Anda harus memilikinyaset fileencoding=utf-8 lagi di depan. Vim bahkan tidak memperhatikan BOM jika Anda menyuruhnya menulis satu (dan memang menulisnya). Agar utf-8 berfungsi, Anda memerlukannya atau set encoding=utf-8di pengaturan startup Anda. Setidaknya, itulah cerita di sistem saya.
Stein
35
:w ++enc=utf-8 %

untuk menulis file dalam pengkodean utf-8 ke disk.

Michael Krelin - peretas
sumber
5
Meskipun ini benar, jawaban Anda seharusnya tidak mengumpulkan begitu banyak suara positif dibandingkan dengan jawaban Eric Johnson. Alasannya adalah jika Anda tidak menyetelnya fileencoding, :w ++enc=utf-8valid satu kali, tetapi lain kali Anda menjalankan :w, nilai dari 'fileencoding'akan digunakan, dan jika Anda belum mengubahnya (secara eksplisit saat mengedit, atau dengan memuat ulang file, berharap yang 'fencs'disetel dengan tepat dan pengkodean aktual terdeteksi dengan baik), pengkodean lama akan kembali.
Benoit
1
@ MichaelKrelin-hacker, mengubah fileencodingjuga merupakan jawaban yang valid untuk pertanyaan, yang tidak menyebabkan IMO mengambil kebiasaan buruk. Tapi oke, itu hanya masalah suasana hati, kurasa.
Benoit
3
@Benoit, saya tidak menyiratkan bahwa jawaban Eric tidak valid! Jika saya menemukan sesuatu yang aneh tentang jawabannya, itu bukan isinya, melainkan mengapa dia memposting pertanyaan dan jawaban atas pertanyaannya sendiri secara berurutan :)
Michael Krelin - hacker
3
@Michael Krelin - peretas: periksa FAQ. Sebenarnya dianjurkan untuk menjawab pertanyaan Anda sendiri. Ini adalah inti dari halaman Tanya Jawab seperti ini. Tidak peduli siapa yang menjawab.
0xC0000022L
2
@ 0xC0000022L, terakhir kali saya periksa (belum diperiksa sekarang), ada sesuatu tentang menemukan solusi setelah melakukan penelitian, bukan tentang memposting pertanyaan dan jawaban dalam satu menit . Meski begitu, saya hanya berbicara tentang apa yang aneh tentang jawabannya, bukan apa yang membuatnya tidak valid atau semacamnya.
Michael Krelin - hacker