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


89

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

Yanıtlar:


104

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. Bkz :help encodingve :help fileencodingeditör bu ayarları nasıl işleyeceğini için Vim. Ayrıca, listelenenleri temel alarak tespit etmeye çalışacak şekilde, vimrc'nize birkaç dosya kodlama ayarı ekleyebilirsiniz.


1
Mükemmel. Biraz sezgisel olsa bile. Teşekkür ederim!
00'da

7
Maalesef doğru değil. Çünkü Vim, okuduğunuz dosyanın kodlamasını bulamıyor . Dosyaya yazılmamıştır. Sadece dosyadaki mevcut karakterlere dayanarak tahmin edebilir. Örneğin, "abcdef" metinli bir dosya birkaç kodlamada olabilir, çünkü pratikte hepsi bu karakterleri desteklemektedir, ancak "šđčćž" olan bir dosya muhtemelen CP1252'de olacaktır. Öyleyse, kodlamayı bir yerden okumuyorsunuz, ancak kodlamanın ne olacağını tahmin edebilirsiniz ve doğru bir şekilde göstermeye dayanarak.
Rook

6
Burada yaptığınız şey, açıkça dosya içeriğine ilişkin gözlemlerinize dayanarak kodlamayı ayarlamaktır . Vim'in birkaç kodlamayı denemesini istiyorsanız, bir dosyayı açarken, birkaçını _vimrc'nizdeki seçeneğe yerleştirin.
Rook

@ldigas, geri bildirim için teşekkürler, cevabını biraz daha açık olması için güncelledim (umarım!)
jtimberman

2
BOM'lerin 1 olduğunu söylemeye değerdir muhtemelen.) UTF-8'e özgü değil - UTF-8'ler diğer BOM'lardan farklı olsa da, 2.) Gerekli değil ve UTF-8'de sıklıkla bulunmuyor .
ruffin

13

Dosyaların kodlamasının, bir dosyanın hiçbir yerinde açıkça belirtilmediğini unutmayın . Bu nedenle, VIM ve diğer uygulamalar kodlamada tahmin etmelidir. Bunu yapmanın kurallı yolu, chardetVIM içinden şu şekilde çalıştırılabilen uygulama iledir:

:!chardet %

Jtimberman tarafından verilen cevap , diskteki dosya ile aynı olmayabilir geçerli arabellek kodlamasını gösterir . Bu nedenle, chardetbazen, her zaman belirli bir kodlamayı kullanmak için yapılandırılmış VIM'iniz varsa (örneğin UTF-8), VIM'den farklı bir kodlama göstereceğini fark edeceksiniz .

Güzel olan şey chardet, tahmininde bir güven puanı vermesidir; oysa VIM \ x7F (ASCII 127) 'nin üzerinde çok fazla karakter yoksa kodlama tahmininde yanlış olabilir (ve çoğu zaman). Örneğin, אuzun bir PHP kod dosyasına bir tane eklemek chardet, dosyanın ISO-8859-20.72 güvende olduğunu düşündürür , biraz daha uzun olan bir ifade eklemek ise שלום, עולם!‏UTF-8'e 0.99 güven puanı verir. Her iki durumda da set fileencoding?gösterdi UTF-8diskteki dosya UTF-8 olduğu için değil, fakat VIM içten UTF-8 kullanmak üzere yapılandırıldığı için.


OS'lerin genelinde chardet'in mevcudiyeti hakkında bir kelime söylemenizi öneriyorum.
Soundararajan,

@Soundararajan: Muhtemelen sadece Debian ve CentOS kullandığımdan bahseden adam değilim. Bununla birlikte, alakalı bilgileriniz varsa cevabı düzenlemeye davetlisiniz. Teşekkürler!
dotancohen

Dışarıdan bunu yapmak için, VIM içeride daha iyi yapmak için gerek görmüyorum: chardet <file>. Yine de, iyi öneri.
lepe

-1

Bunu buldum: https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

Vim doğru kodlamayı tespit edemiyorsa, farklı bir kodlama kullanarak bir dosyayı yeniden yükleyebilirsiniz:

:e ++enc=<encoding>

nerede encodingolabilircp850, ISO-8859-1, UTF-8, ...

Dotancohen tarafından önerilen file yourfilenamekodlamayı bulmak chardetect( python-chardetveya uchardetLinux dağıtımınıza göre veya bunlara bağlı olarak) bulmak için kullanabilirsiniz .


Bu, mevcut kodlamanın nasıl bulunacağı sorusuna cevap vermez. Bunun yerine bu komut arabellekte başka bir kodlamayı zorlar.
Ruslan
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.