विम अजीब चरित्र <91>, <92> दिखाता है


26

SSH के ऊपर Vim का उपयोग करते समय मैंने अपने SSH / Vim सत्र के वेबपृष्ठ से कुछ सामग्री की प्रतिलिपि बनाई और निम्न परिणाम प्राप्त किया:

SIZE=`df -h|grep $DISC|awk <91>{print $2}<92>`

जाहिरा तौर पर <91>और के लिए <92>खड़ा है, 'लेकिन मैं इस सामान को कैसे खोज और बदल सकता हूं? और उसका क्या मतलब 91/ 92है? यह कैसे एन्कोड किया गया है क्योंकि 91/ 92ASCII में / \और मतलब है [?

जवाबों:


23

आपके स्रोत वेब पेज की सामग्री को बहुत अधिक सुधार किया गया था। पाठ निस्संदेह उपयोग करने वाला था (सीधे) एकल उद्धरण (ASCII 39/0x27, U+0027घुंघराले सिंगल कोट्स के बजाय) ( U+2018और U+2019है, जो कर रहे हैं 0x91 and 0x92CP1252 (भी MS-एएनएसआई और windows-1252 के रूप में जाना में, विंडोज पर एक आम 8 बिट एन्कोडिंग)) ।

विम आपको हेक्स कोड दिखा रहा है क्योंकि वे जो भी एन्कोडिंग का उपयोग कर रहे हैं उसमें मान्य नहीं हैं (शायद UTF-8)। यदि आप पाठ को संपादित कर रहे हैं जो पहले से ही एक फ़ाइल में सहेजा गया है, तो आप फ़ाइल को CP1252 के रूप में पुनः लोड कर सकते हैं :e ++enc=cp1252; यह घुंघराले उद्धरण को दृश्यमान बनाना चाहिए। लेकिन CP1252 के रूप में इसे फिर से लोड करने का कोई वास्तविक कारण नहीं है, बस 0x91और 0x92पात्रों को हटा दें और उन्हें एकल उद्धरण के साथ बदल दें।


आप अक्सर एमएस वर्ड से कॉपी की गई सामग्री से घुंघराले उद्धरण / एपोस्ट्रोफ प्राप्त करते हैं जो "स्मार्ट कोट्स" सुविधा के भाग के रूप में घुंघराले उद्धरण / एपोस्ट्रोफ को सम्मिलित करता है। यदि आपका फ़ॉन्ट उन वर्णों का समर्थन नहीं करता है, तो आपको चरित्र के बजाय एक खाली स्थान मिलेगा।
लैम्बाकॉक

1
+1 के लिए:e ++enc=cp1252
wufulk

@ क्रिसहॉन्सेन, क्या वीआई को एक ध्वज के साथ बुलाने का कोई तरीका है जो उसी चीज को पूरा करता है :e ++enc=cp1252? अगर मैं vi को कमांड लाइन से एक फ़ाइल चाहता हूं जिसमें MS शब्द अक्षर हैं, तो यह अच्छा होगा कि आप vi को खोलने के बजाय एक चरण में कर सकते हैं और फिर :eकमांड के साथ फाइल लोड कर रहे हैं
लियो साइमन

@LeoSimon: vim --cmd 'set fileencodings=cp1252' /path/to/file- कमांड सामान्य से पहले चलता है .vimrcऔर fileencodingsविकल्प सेट करता है (समाप्त होने पर ध्यान दें s; आप छोटे नाम का भी उपयोग कर सकते हैं fencs) ताकि विम केवल CP1252 की कोशिश करेंगे जब फाइलें लोड हो रही हों। यह ऐसी फ़ाइलों के एक-बंद संपादन के लिए काम करना चाहिए, लेकिन यह जटिलताओं का कारण बन सकता है यदि आप अन्य एन्कोडिंग के साथ फ़ाइलों को संपादित करने के लिए विम के उस उदाहरण का उपयोग करना चाहते हैं।
क्रिस जॉन्सन

धन्यवाद !, स्पष्ट होने के लिए, मैं अब उपयोग कर रहा हूँvim -c"set fencs" /path/to/file
लियो साइमन

27

91 और 92 खुले और बंद घुंघराले एपॉस्ट्रॉफ़ (एकल उद्धरण) के लिए हेक्स कोड हैं, जो कि एमएस 1 के लेटेक्स / आईएसओ -8859-1 एन्कोडिंग के विंडोज डिफ़ॉल्ट संस्करण में है, जिसे विशेष रूप से cp1252 / Windows-1252 कहा जाता है (जहाँ cp कोड के लिए खड़ा है) पृष्ठ)।

इन अक्षरों को अक्सर "स्मार्ट उद्धरण" सुविधा के भाग के रूप में वर्ड दस्तावेजों / आउटलुक ईमेल से सामग्री की नकल करने वाले लोगों द्वारा डाला जाता है। इस कोड पृष्ठ में अन्य समस्या वर्ण हेक्स 93/94 हैं जो खुले और बंद दोहरे उद्धरण, बुलेट बिंदु (•) और OE संयुक्ताक्षर (ig और Œ) हैं। आप "समस्या वर्ण" की एक पूरी सूची देख सकते हैं, जो कि सीधे ISO-8859-1 या UTF-8 में सीधे कोड के साथ मैप नहीं करते हैं, cp1252 के लिए विकिपेडा पेज पर हरे रंग में हाइलाइट किया गया है।

यदि आप चाहते हैं कि फ़ाइल को सही एन्कोडिंग में खोलना है तो ++ कमांड = cp1252 विकल्प का उपयोग करें: ई कमांड:

:e ++enc=1252 filename.txt

आप एक विशेष खराब हेक्स कोड को Vim में स्थानापन्न कमांड (: s) और एक कोड प्रतिस्थापन के साथ बदल सकते हैं:

\d123   decimal number of character
\o40    octal number of character up to 0377
\x20    hexadecimal number of character up to 0xff
\u20AC  hex. number of multibyte character up to 0xffff
\U1234  hex. number of multibyte character up to 0xffffffff

आपको करने के लिए हेक्स 91/92 वर्णों को बदलने की आवश्यकता है:

:%s/[\x91\x92]/'/g

निर्देशिका में सभी फ़ाइलों में उन वर्णों को बदलने के लिए एक बैश कमांड होना बहुत अच्छा होगा। मैं एक त्वरित Google खोज के साथ आया था, sed -i "s/[\x91\x92]/\'/g" *.txtलेकिन यह काम नहीं किया।
बुटेल बटुकस

मुझे बस कुछ ऐसा मिला जो कमांड लाइन के लिए काम करता था। यह वर्तमान फ़ोल्डर में सभी .txt फ़ाइलों के लिए खोज / प्रतिस्थापित करता है। हालांकि, इसका उपयोग करने से पहले Reasearch पर्ल, क्योंकि मुझे पता नहीं है कि स्विच क्या करते हैं। perl -p -i -e "s/[\x91\x92]/'/g" *.txt
ब्यूटिक बटुक

2
sed -i "s/\x92/'/g"मेरे लिए काम किया।
कारोली होर्वाथ


-3

वे वास्तव में हेक्स 91 और 92 के लिए खड़े हैं, जो कि विंडोज कोडपेज में एकल उद्धरण ('और' - Alt-0145 और Alt-0146) को खोलने और बंद करने के लिए हैं।

निम्नलिखित खोज / बदलें का प्रयास करें:

:s%/\<9[12]\>/'/g

1
मैं अंकों की कमी के कारण कम नहीं कर सकता, लेकिन यह प्रतिस्थापन आदेश इतना गलत है कि मुझे पता नहीं है कि कहां से शुरू करना है :(
lambacck

1
यह मेरे लिए काम नहीं करता है: stackoverflow.com/questions/2798398/… एक समाधान देता है जो काम करता है।
कन्फ्यूजन

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