VIM'in varsayılan kodlamasını UTF-8 olarak nasıl ayarlayabilirim?


62

Tercüme edilmiş dizeleri sağlayan açık kaynaklı bir projeye katkıda bulunmak istiyorum. Gereksinimlerinden biri, katılımcıların PO dosyalarının kodlaması için UTF-8 kullanması gerektiğidir.

Linux üzerinde VIM 7.3 kullanıyorum. VIM'in kodlamasının UTF-8 olarak ayarlandığından nasıl emin olabilirim, böylece .po dosyasını doğru şekilde düzenleyip kaydedebilirim?

Yanıtlar:


64

Vim varolan bir dosyayı okuduğunda, dosya kodlamasını algılamaya çalışır. Dosyayı yazarken, Vim algıladığı dosyayı kullanır (farklı şekilde anlatmanız hariç). Yani UTF-8 olarak algılanan bir dosya UTF-8 olarak yazılmıştır, Latin-1 olarak algılanan bir dosya Latin-1 olarak yazılmıştır, vb.

Varsayılan olarak, algılama işlemi kaba. Vim ile açtığınız her dosyanın, üstünde Unicode bayt sırası işareti bulunmadığı sürece, Latin-1 olduğu varsayılır. Bayt sırası işaretine sahip olmayan bir UTF-8 dosyasını düzenlemek zor olacaktır, çünkü herhangi bir çok baytlık karakter arabellekte tek karakter yerine karakter dizisi olarak gösterilir.

Daha kötüsü, Vim, varsayılan olarak, arabellekteki metni temsil etmek için Latin-1 kullanır. Yani UTF-8 dosya ile bir bayt sırası işareti Latin-1'e aşağı dönüşüm tarafından bozulmuş olacaktır.

Çözüm Vim'i UTF-8'i dahili olarak kullanacak şekilde yapılandırmaktır. Aslında bu, Vim belgelerinde önerilmektedir ve bu şekilde yapılandırılmamasının tek nedeni, Vim'in temel olarak Latin-1 editörü olarak çalışmasını bekleyen kullanıcılar arasında büyük bir karışıklık yaratmamaktır.

Gözlerinde farklı .vimrcekleyebilir set encoding=utf-8ve Vim yeniden başlatın.

Veya bunun yerine, LANGortam değişkenini UTF-8'in tercih ettiğiniz karakter kodlaması olduğunu belirtecek şekilde ayarlayın . Bu sadece Vim'i değil LANG, metni nasıl temsil edeceğini belirlemeye dayanan herhangi bir yazılımı da etkileyecektir . Örneğin, metnin enAmerika Birleşik Devletleri'nde ( US) konuşulduğu gibi UTF-8 ( utf-8) olarak kodlanan İngilizce olarak ( ) görünmesi gerektiğini belirtmek için ayarlanmış LANG=en_US.utf-8.

Şimdi Vim, arabellekteki metni temsil etmek için UTF-8 kullanacaktır. Ayrıca, bir dosyadaki UTF-8 kodlamasını tespit etmek için daha kararlı bir çaba gösterecektir. Bir bayt sırası işareti aramanın yanı sıra, Latin-1'e geri dönmeden önce bayt sırası işareti olmadan UTF-8'i de kontrol edecektir. Bu yüzden artık UTF-8'de kodlanmış bir dosyayı bozmaz ve düzenleme oturumu sırasında UTF-8 karakterlerini düzgün şekilde göstermesi gerekir.

Vim'in dosya kodlamasını nasıl algıladığı hakkında daha fazla bilgi için , Vim belgelerinde bulunan fileencodingsseçeneğe bakın .

Vim'in dahili olarak kullandığı kodlamayı ayarlama hakkında daha fazla bilgi için encoding seçeneğe bakın .

Bir dosyayı diske geri yazarken kullanılan kodlamayı geçersiz kılmanız gerekirse , fileencoding seçeneğe bakın .


3
Aslında, düzenlemeyi zahmet etmem bile gerekmiyor .vimrc; Aslında, varsayılan kodlama değeri "latin1" veya sistemimde ayarlanan $ LANG değerinden en_US.UTF-8. Bu nedenle :set encodingverir encoding=utf-8kutunun dışında. Beklendiği gibi, eğer LANG ayarlanmamışsa :set encodingverir encoding=latin1. Harika cevap için teşekkürler!
— Paolo,

Bu genellikle yararlı olabilir, bu yüzden cevabı da ekledim.
— MetaEd

Latin1 olarak kodlanmış bir dosyayı açarsanız, bu ayar dosya kodlamasını değiştirmez mi? Vim'in bir dosyanın kodlamasını sağlam tutmasını ancak yeni dosyalar için utf-8'i tercih etmesini nasıl sağlayabilirsiniz?
— David Kennedy,

@DaveKennedy Vim, dosyayı yalnızca Latin-1 Latin-1 olduğunda Latin-1 olarak değerlendirebilir. Kodlama belirsiz olduğunda, Vim'in seçmesi gerekir. Örneğin, yalnızca 7 bitlik ASCII kodlarını içeren bir dosya geçerli Latin1, ancak aynı zamanda UTF-8 ve diğerleri için de geçerlidir. Böyle bir dosya normalde UTF-8 olarak değerlendirilecektir. Bu sonuçtan kaçınmanın bir yolu, dosya kodlamasını açık hale getirmektir. Gördüğüm püf nokta bir dizi 0xF7 kodunu eklemektir. UTF-8'de 0xF7 geçersiz. Fakat Latince-1'de, bölünme işaretini (÷) temsil eder. Vim normalde dosyanın Latin-1 olduğu sonucuna varır.
— MetaEd

4

Vimdoc'a göre vim dosya kodlamasını otomatik olarak algılamaya çalışır, bu nedenle mevcut dosyaları düzenliyorsanız iyi olmanız gerekir.

İsterseniz her zaman kodlamayı zorlayabilirsiniz :set fileencodings=utf-8. Belgeleri burada bulabilirsiniz .


6
fileencodings = utf-8, Vim'in giriş dosyasını UTF-8 olarak tanımasına, ardından Latin-1'e kayıplı bir dönüşüm gerçekleştirmesine neden olur. Ayrıca, Vim'in UTF-16'yı tanımamasına neden olur. Daha iyi bir çözüm, Vim'i yerel bir baytlık düzenleyiciden yerel bir çok baytlık düzenleyiciye dönüştüren encoding = utf-8'i ayarlamaktır.
— MetaEd

Eğer cevap verebilir @MetaEd bu yorumunuz :) üzerinde durmaya
— hhh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.