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.