it-swarm.asia

Geçerli tamponun kodlamasını vim'de nasıl bulabilirim?

Diyelim ki bazı dosyaları vim (veya gvim) ile düzenliyorum. Dosyanın kodlaması hakkında hiçbir fikrim yok ve UTF-8'de mi yoksa ISO-8859-1'de mi veya başka bir durumda mı olduğunu bilmek istiyorum. Bir şekilde vim'e bana hangi kodlamanın kullanıldığını göstermesini söyleyebilir miyim?

88
innaM

Dosya kodlama ayarı mevcut tamponun kodlamasını gösterir:

:set fileencoding
fileencoding=utf8

Bir düz metin dosyasının kodlamasını belirlemenin yaygın bir yolu yoktur, çünkü bu bilgiler dosyanın kendisine kaydedilmez - Kodlamayı gösteren BOM adlı UTF-8 Dosyaları hariç. Bu nedenle xml ve html dosyalarının karakter kümesi meta etiketleri vardır.

'Kodlama' ayarıyla belirli bir kodlamayı zorlayabilirsiniz. Editörün bu ayarları nasıl kullandığını öğrenmek için Vim'deki :help encoding ve :help fileencoding bölümüne bakın. Ayrıca, listelenenleri temel alarak tespit etmeye çalışacak şekilde vimrc'nize birkaç dosya kodlama ayarı ekleyebilirsiniz.

102
jtimberman

Dosyaların kodlamasının açıkça belirtilmediğini bir dosyanın herhangi bir yerinde olduğunu unutmayın. Bu nedenle, kodlamada VIM ve diğer uygulamalar tahmin edilmelidir. Bunu yapmanın kurallı yolu, VIM içinden çalıştırılabilen chardet uygulamasıdır:

:!chardet %

Jtimberman tarafından verilen cevap, diskteki dosya ile aynı olmayabilir, current buffer kodlamasını gösterir. Bu nedenle, chardet öğesinin bazen VIM'den farklı bir kodlama göstereceğini fark edeceksiniz, özellikle de her zaman belirli bir kodlamayı kullanmak için yapılandırılmış VIM varsa (ör. UTF-8).

chardet hakkındaki güzel şey tahmininde bir güven puanı vermesidir, oysa VIM\x7F (ASCII 127) değerinden fazla karakter yoksa kodlamayı tahmin etmede yanlış olabilir (ve çoğu zaman yanlıştır). Örneğin, uzun bir PHP koduna tek bir א eklemek, chardet dosyasının dosyanın 0.72 güven ile ISO-8859-2 olduğunu düşünmesini sağlarken, biraz daha uzun bir ifade eklemek שלום, עולם!‏ UTF-8'e güven puanını verir 0.99. Her iki durumda da set fileencoding?, diskteki dosyanın UTF-8 olması nedeniyle değil, VIM UTF-8'i dahili olarak kullanacak şekilde yapılandırıldığı için UTF-8 öğesini gösterdi.

12
dotancohen