मैं UTF-8 में VIM की डिफ़ॉल्ट एन्कोडिंग कैसे सेट कर सकता हूं?


62

मैं एक ओपन सोर्स प्रोजेक्ट में योगदान करना चाहता हूँ, जो अनुवादित स्ट्रिंग्स प्रदान करता है। उनकी आवश्यकताओं में से एक यह है कि योगदानकर्ताओं को PO फ़ाइलों के लिए एन्कोडिंग के रूप में UTF-8 का उपयोग करना चाहिए।

मैं लिनक्स पर VIM 7.3 का उपयोग कर रहा हूं। मैं यह कैसे सुनिश्चित कर सकता हूं कि VIM की एन्कोडिंग UTF-8 पर सेट है, ताकि मैं .po फ़ाइल को सही तरीके से संपादित और सहेज सकूं?

जवाबों:


64

जब विम एक मौजूदा फ़ाइल पढ़ता है, तो यह फ़ाइल एन्कोडिंग का पता लगाने की कोशिश करता है। फ़ाइल को लिखते समय, विम फ़ाइल एन्कोडिंग का उपयोग करता है जिसे यह पता चला (जब आप इसे अलग-अलग बताते हैं) को छोड़कर। तो एक फाइल जिसे UTF-8 के नाम से जाना जाता है, उसे UTF-8 के रूप में लिखा जाता है, लैटिन -1 के रूप में पाई गई एक फाइल को लैटिन -1 के रूप में लिखा जाता है, और इसी तरह।

डिफ़ॉल्ट रूप से, खोज प्रक्रिया क्रूड है। जब तक आप विम के साथ खुलने वाली हर फ़ाइल को लेटिन -1 मान लिया जाएगा, जब तक कि वह शीर्ष पर एक यूनिकोड बाइट-ऑर्डर मार्क का पता नहीं लगा लेती। एक बाइट-ऑर्डर मार्क के बिना एक यूटीएफ -8 फ़ाइल को संपादित करना मुश्किल होगा क्योंकि किसी भी मल्टीबैट पात्रों को बफर में एकल अक्षरों के बजाय चरित्र अनुक्रम के रूप में दिखाया जाएगा।

इससे भी बदतर, विम, डिफ़ॉल्ट रूप से, बफर में पाठ का प्रतिनिधित्व करने के लिए लैटिन -1 का उपयोग करता है। इसलिए यूटीएफ -8 फाइल बाइट-ऑर्डर मार्क के साथ लैटिन -1 में डाउन-कन्वर्सेशन द्वारा करप्ट हो जाएगी।

आंतरिक रूप से UTF-8 का उपयोग करने के लिए Vim को कॉन्फ़िगर करने के लिए समाधान है। यह वास्तव में, विम प्रलेखन में अनुशंसित है, और एकमात्र कारण यह कॉन्फ़िगर नहीं किया गया है कि बॉक्स से बाहर का रास्ता उपयोगकर्ताओं के बीच भारी भ्रम पैदा करने से बचने के लिए है जो विम को मूल रूप से लैटिन -1 संपादक के रूप में संचालित करने की उम्मीद करते हैं।

अपने में .vimrc, set encoding=utf-8विम जोड़ें और पुनः आरंभ करें।

या इसके बजाय, LANGयह इंगित करने के लिए पर्यावरण चर सेट करें कि UTF-8 आपकी पसंदीदा वर्ण एन्कोडिंग है। यह न केवल विम को प्रभावित करेगा बल्कि कोई भी सॉफ्टवेयर जो LANGयह निर्धारित करने के लिए निर्भर करता है कि इसे पाठ का प्रतिनिधित्व कैसे करना चाहिए। उदाहरण के लिए, यह इंगित करने के लिए कि पाठ अंग्रेजी में दिखाई देना चाहिए ( en), जैसा कि संयुक्त राज्य अमेरिका में बोला गया है ( US), UTF-8 ( utf-8), सेट के रूप में एन्कोडेड LANG=en_US.utf-8

अब विम बफर में पाठ का प्रतिनिधित्व करने के लिए UTF-8 का उपयोग करेगा। साथ ही, यह किसी फ़ाइल में UTF-8 एन्कोडिंग का पता लगाने के लिए अधिक दृढ़ प्रयास भी करेगा। बाइट-ऑर्डर मार्क की तलाश के अलावा, यह लैटिन -1 में वापस आने से पहले एक बाइट-ऑर्डर मार्क के बिना UTF-8 के लिए भी जाँच करेगा। इसलिए यह UTF-8 में कोड की गई फ़ाइल को भ्रष्ट नहीं करेगा, और इसे संपादन सत्र के दौरान UTF-8 वर्णों को ठीक से प्रदर्शित करना चाहिए।

कैसे विम फ़ाइल एन्कोडिंग का पता लगाता है के बारे में अधिक जानकारी के लिए, विम दस्तावेज में विकल्पfileencodings

एन्कोडिंग कि विम आंतरिक रूप से उपयोग करता है की स्थापना के बारे में अधिक जानकारी के लिए, विकल्पencoding

यदि आपको फ़ाइल को डिस्क पर वापस लिखते समय उपयोग किए गए एन्कोडिंग को ओवरराइड करने की आवश्यकता है, तो fileencoding विकल्प देखें ।


3
वास्तव में ऐसा लगता है कि मुझे एडिटिंग से भी परेशान नहीं होना है .vimrc; वास्तव में एन्कोडिंग का डिफ़ॉल्ट मूल्य "लेट 1" या $ LANG से मूल्य है, जो मेरे सिस्टम पर सेट है en_US.UTF-8। इस कारण से :set encodingदेता है encoding=utf-8बॉक्स से बाहर। उम्मीद के मुताबिक, अगर LANG परेशान है, तो :set encodingदेता है encoding=latin1। शानदार जवाब के लिए धन्यवाद!
पाओलो

यह आम तौर पर उपयोगी हो सकता है इसलिए मैंने इसे उत्तर में जोड़ा है।
मेटाएड

यदि आप ऐसी फ़ाइल खोलते हैं जो कि latin1 के रूप में एन्कोडेड है, तो क्या यह सेटिंग फ़ाइल एन्कोडिंग को नहीं बदलेगी? आप फ़ाइल के एन्कोडिंग को अक्षुण्ण रखने के लिए विम कैसे प्राप्त कर सकते हैं, लेकिन नई फ़ाइलों के लिए utf-8 पसंद करते हैं?
डेविड केनेडी

@DaveKennedy विम फ़ाइल को लैटिन -1 के रूप में ही व्यवहार करने में सक्षम है जब फ़ाइल स्पष्ट रूप से लैटिन -1 है। जब एन्कोडिंग अस्पष्ट है, तो विम को चुनना होगा। उदाहरण के लिए, केवल 7-बिट एएससीआईआई कोड वाली एक फाइल वैध लैटिन 1 है, लेकिन यह यूटीएफ -8 और अन्य भी मान्य है। ऐसी फाइल को आमतौर पर UTF-8 के रूप में माना जाएगा। इस परिणाम से बचने का एक तरीका फ़ाइल एन्कोडिंग को अस्पष्ट बनाना है। मैंने जो ट्रिक देखी है, उसमें 0xF7 कोड्स का एक स्ट्रिंग जोड़ना है। UTF-8 में, 0xF7 अमान्य है। लेकिन लैटिन -1 में, यह विभाजन चिह्न (,) का प्रतिनिधित्व करता है। विम सामान्य रूप से यह निष्कर्ष निकालेंगे कि फ़ाइल लैटिन -1 है।
मेटाएड

4

Vimdoc vim के अनुसार स्वचालित रूप से फ़ाइल एन्कोडिंग का पता लगाने की कोशिश करता है, इसलिए यदि आप मौजूदा फ़ाइलों को संपादित कर रहे हैं तो आप अच्छे होंगे।

आप हमेशा एन्कोडिंग को मजबूर कर सकते हैं यदि आप चाहते हैं :set fileencodings=utf-8। आप यहाँ दस्तावेज़ पा सकते हैं ।


6
fileencodings = utf-8 इनपुट फ़ाइल को UTF-8 के रूप में पहचानने के लिए विम का कारण बनेगा, लेकिन फिर लैटिन -1 में एक हानिकारक रूपांतरण करेगा। इसके अलावा यह यूटीएफ -16 को पहचानने में विफल होने का कारण होगा। बेहतर समाधान एन्कोडिंग = यूटीएफ -8 सेट करना है जो विम को मूल एक-बाइट संपादक से एक देशी मल्टीबाइट संपादक में बदल देता है।
मेटाएड

@MetaEd आप जवाब दे सकते हैं इस अपनी टिप्पणी :) पर विस्तृत करने के
hhh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.