Setel encoding dan fileencoding ke utf-8 di Vim

96

Apa perbedaan antara kedua perintah ini?

  • set encoding=utf-8
  • set fileencoding=utf-8

Apakah saya perlu menyetel keduanya ketika saya ingin menggunakan utf-8?

Juga, apakah saya perlu menyetel pengkodean file dengan setatau setglobal?

Kiraly Zoltan
sumber
Perhatikan bahwa lebih aman untuk mengatur pengkodean di LOCALE Anda daripada memaksanya di Vim, jika Anda akan mengedit file non-unicode. Anda akan mendapatkan hasil yang sama karena default ke LOCALE dan Anda tidak akan mengacaukan karakter asing jika bertemu.
timss

Jawaban:

90

TL; DR

Dalam kasus pertama dengan set encoding=utf-8, Anda akan mengubah pengkodean keluaran yang ditampilkan di terminal.

Dalam kasus kedua dengan set fileencoding=utf-8, Anda akan mengubah pengkodean keluaran dari file yang ditulis .

Seperti yang dinyatakan oleh @Dennis, Anda dapat mengatur keduanya di ~ / .vimrc Anda jika Anda selalu ingin bekerja utf-8.

Keterangan lebih lanjut

Dari wiki VIM tentang bekerja dengan unicode

" encodingmengatur bagaimana vim akan merepresentasikan karakter secara internal . Utf-8 diperlukan untuk sebagian besar rasa Unicode."

" fileencodingmenyetel pengkodean untuk file tertentu (lokal ke buffer);: setglobal menyetel nilai default. Nilai kosong juga dapat digunakan: defaultnya sama dengan 'encoding'. Atau Anda mungkin ingin menyetel salah satu pengkodean ucs, Itu mungkin membuat file disk yang sama lebih besar atau lebih kecil tergantung pada campuran karakter tertentu Anda. Selain itu, IIUC, utf-8 selalu big-endian (bit tinggi dulu) sementara ucs bisa big-endian atau little-endian, jadi jika Anda menggunakannya, Anda mungkin perlu menyetel 'bom "(lihat di bawah)."

Adrien Lacroix
sumber
3
Maaf saya tidak mengerti Apa tepatnya yang dilakukan fileencoding?
Kiraly Zoltan
25
Dalam kasus pertama, Anda akan mengubah encoding keluaran yang ditampilkan di terminal. Dalam kasus kedua, Anda akan mengubah pengkodean keluaran dari file yang ditulis.
Adrien Lacroix
1
+1 Untuk jawaban singkat dan manis, bukan hanya mengulang dokumentasi resmi! :)
425nesp
Jika diperlukan ad-hoc langsung dari baris perintah vim -c "set encoding=utf-8" file.ext.
Hans Ginzel
87
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

Anda juga dapat mengatur keduanya ~/.vimrcjika Anda selalu ingin bekerja dengan utf-8.

Dennis
sumber
0

Anda dapat mengatur variabel 'fileencodings' di .vimrc Anda.

Ini adalah daftar pengkodean karakter yang dipertimbangkan saat mulai mengedit file yang ada. Ketika sebuah file dibaca, Vim mencoba menggunakan pengkodean karakter yang disebutkan pertama. Jika kesalahan terdeteksi, kesalahan berikutnya dalam daftar akan dicoba. Ketika encoding yang berhasil ditemukan, 'fileencoding' diatur untuk itu. Jika semuanya gagal, 'fileencoding' disetel ke string kosong, yang berarti nilai 'encoding' digunakan.

Lihat :help filencodings

Jika Anda sering bekerja dengan misalnya cp1252, Anda dapat menambahkannya di sana:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
Mike11
sumber