मैं वर्तमान बफर के एन्कोडिंग को विम में कैसे खोजूं?


89

कहो मैं कुछ फ़ाइल vim (या gvim) के साथ संपादित कर रहा हूं। मुझे फ़ाइल के एन्कोडिंग के बारे में कोई जानकारी नहीं है और मैं जानना चाहता हूं कि यह UTF-8 या ISO-8859-1 में है या जो भी हो? क्या मैं किसी तरह विम को बता सकता हूं कि मुझे कौन सी एन्कोडिंग का उपयोग किया गया है?

जवाबों:


104

Fileencoding सेटिंग वर्तमान बफ़र एन्कोडिंग दिखाता है:

:set fileencoding
fileencoding=utf8

वास्तव में एक प्लेनटेक्स्ट फ़ाइल के एन्कोडिंग को निर्धारित करने का एक सामान्य तरीका नहीं है, क्योंकि यह जानकारी फ़ाइल में ही सहेजी नहीं गई है - यूटीएफ -8 फ़ाइलों को छोड़कर जहां आपको एक तथाकथित बीओएम मिला है जो एन्कोडिंग को इंगित करता है। यही कारण है कि xml और html फ़ाइलों में मेटाटैग का आकर्षण होता है।

आप 'एन्कोडिंग' सेटिंग के साथ किसी विशेष एन्कोडिंग को लागू कर सकते हैं। संपादक इन सेटिंग्स को कैसे संभालता है, इसे देखें :help encodingऔर :help fileencodingविम में देखें । तुम भी अपने vimrc करने के लिए कई fileencoding सेटिंग्स जोड़ सकते हैं सूचीबद्ध लोगों के आधार पर पता लगाने की कोशिश करने के लिए है।


1
उत्तम। भले ही कुछ काउंटर सहज हो। धन्यवाद!
इन्नाएम

7
Unfortunatelly, सही नहीं है। विम के लिए आपके द्वारा पढ़ी जा रही फ़ाइल का एन्कोडिंग नहीं मिल सकता है । यह फ़ाइल में नहीं लिखा है। यह केवल फ़ाइल में उपलब्ध वर्णों के आधार पर अनुमान लगा सकता है। उदाहरण के लिए "एब्डेफ़" पाठ के साथ एक फ़ाइल कई एन्कोडिंग में हो सकती है, क्योंकि व्यावहारिक रूप से सभी उन पात्रों का समर्थन करते हैं, लेकिन "šđčćž" के साथ एक फ़ाइल संभवतः CP1252 में होगी। तो, आप कहीं से एन्कोडिंग नहीं पढ़ रहे हैं, लेकिन यह अनुमान लगाना कि एन्कोडिंग क्या हो सकती है, और यह ठीक से प्रदर्शित होने पर आधारित है।
Rook

6
आप यहाँ क्या कर रहे हैं स्पष्ट रूप से एन्कोडिंग सेट कर रहा है , जो फ़ाइल की सामग्री के आपके अवलोकनों के आधार पर है। यदि आप किसी फ़ाइल को खोलते समय कई एन्कोडिंग की कोशिश करना चाहते हैं, तो उनमें से कई को अपने _vimrc विकल्प में डालें।
Rook

@ldigas, प्रतिक्रिया के लिए धन्यवाद, मैंने उत्तर को थोड़ा और स्पष्ट करने के लिए अद्यतन किया है (मुझे आशा है!)
jtimberman

2
संभवतः यह उल्लेख करने योग्य है कि BOMs 1. यूटीएफ -8 के लिए अद्वितीय नहीं हैं - हालांकि UTF-8 अन्य BOMs से अलग है, 2.) आवश्यक नहीं है और अक्सर UTF-8 में नहीं पाए जाते हैं
रफिन

13

ध्यान दें कि फ़ाइलों की एन्कोडिंग स्पष्ट रूप से किसी फ़ाइल में कहीं भी नहीं बताई गई है। इस प्रकार, VIM और अन्य अनुप्रयोगों को एन्कोडिंग पर अनुमान लगाना चाहिए। ऐसा करने का विहित तरीका chardetआवेदन के साथ है , जिसे VIM के भीतर से चलाया जा सकता है:

:!chardet %

Jtimberman द्वारा प्रदान किया गया उत्तर आपको वर्तमान बफर की एन्कोडिंग दिखाता है जो डिस्क पर फ़ाइल के समान एन्कोडिंग नहीं हो सकती है। इस प्रकार, आप देखेंगे कि chardetकभी-कभी VIM की तुलना में एक अलग एन्कोडिंग दिखाई देगा, खासकर यदि आपने VIM को हमेशा एक विशिष्ट एन्कोडिंग (यानी UTF-8) का उपयोग करने के लिए कॉन्फ़िगर किया है।

इसके बारे chardetमें अच्छी बात यह है कि यह अपने अनुमान के लिए एक आत्मविश्वास स्कोर देता है, जबकि VIM हो सकता है (और अक्सर) एन्कोडिंग का अनुमान लगाने के बारे में गलत है यदि \ x7F (ASCII 127) के ऊपर कई वर्ण नहीं हैं। उदाहरण के लिए, אPHP कोड की एक लंबी फ़ाइल में एक एकल जोड़ने से chardetलगता है कि फ़ाइल ISO-8859-20.72 के विश्वास के साथ है, जबकि थोड़े लंबे वाक्यांश שלום, עולם!‏को जोड़ने पर यह UTF-8 को 0.99 के आत्मविश्वास स्कोर के साथ देता है। दोनों मामलों में, नहीं set fileencoding?दिखाया गया UTF-8क्योंकि डिस्क पर फ़ाइल UTF-8 थी, लेकिन क्योंकि VIM UTF-8 का आंतरिक रूप से उपयोग करने के लिए कॉन्फ़िगर किया गया है।


मेरा सुझाव है कि आप OS'es भर में chardet की उपलब्धता के बारे में एक शब्द का उल्लेख करते हैं।
साउंडराजन

@ सूंदरराजन: मैं शायद इस बात का उल्लेख नहीं कर सकता कि मैं डेबियन और सेंटोस का ही उपयोग करता हूं। यदि आपके पास प्रासंगिक जानकारी है तो आपको उत्तर को संपादित करने के लिए आमंत्रित किया जाता है। धन्यवाद!
dotancohen

मुझे ऐसा करने की आवश्यकता नहीं दिखती है कि वीआईएम के अंदर, इसे बाहर से करने के लिए बेहतर है chardet <file>:। फिर भी, अच्छा सुझाव।
lep

-1

मैंने पाया कि: https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

यदि आप सही एन्कोडिंग का पता लगाने में सक्षम नहीं थे, तो आप एक अलग एन्कोडिंग का उपयोग करके किसी फ़ाइल को पुनः लोड कर सकते हैं:

:e ++enc=<encoding>

जहां encodingहो सकता हैcp850, ISO-8859-1, UTF-8, ...

आप उपयोग कर सकते हैं file yourfilenameएन्कोडिंग या खोजने के लिए chardetect(द्वारा प्रदान की python-chardetया uchardetआधार पर अपने लिनक्स वितरण) के रूप में dotancohen ने सुझाव दिया।


यह वर्तमान एन्कोडिंग का पता लगाने के प्रश्न का उत्तर नहीं देता है। इसके बजाय यह कमांड बफर पर कुछ अन्य एन्कोडिंग को मजबूर करेगा।
रुस्लान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.