विम में M वर्ण का क्या अर्थ है?


500

मैं ^Mअपने vimrc में चरित्र प्राप्त करता रहता हूं और इससे मेरा कॉन्फ़िगरेशन टूट जाता है।


35
BTW यह एक महान संसाधन है।
ऑर्बिट

@LightnessRacesinOrbit - हम्म, यह अभी भी रूप में काम करता है। मैंने लिंक को मृत बताते हुए अपनी टिप्पणी वापस ले ली है।
ArtOfWarfare

3
@LightnessRacesinOrbit लिंक के लिए मिरर, जो इस समय नीचे है: 85i.org/doc/vim/html/digraph.html#digraph-table
alexpls

4
:digraphsविम के भीतर टाइप करने से डिग-टेबल दिखाता है कि @LightnessRacesinOrbit से जुड़ा हुआ है।
पूछ्वचन

1
Php का उपयोग करके इस तरह के चरित्र को बदलने की कोशिश करते समय, यह preg_replace('/[\x01]/', ' ' ,$str); आशा करें कि यह मदद करता है।
राहेल गेलर

जवाबों:


561

एक नए वर्ण के लिए यूनिक्स 0xA का उपयोग करता है। विंडोज दो वर्णों के संयोजन का उपयोग करता है: 0xD 0xA। 0xD गाड़ी वापसी चरित्र है। ^Mजिस तरह से विम 0xD (0x0D = 13, M अंग्रेजी वर्णमाला में 13 वां अक्षर है) प्रदर्शित करता है।

आप ^Mनिम्नलिखित को चलाकर सभी वर्णों को हटा सकते हैं :

:%s/^M//g

जहां ^Mनीचे Ctrlऔर टाइप करके दर्ज vकिया जाता है m, और फिर जारी किया जाता है Ctrl। इसे कभी-कभी संक्षिप्त रूप में देखा जाता है ^V^M, लेकिन ध्यान दें कि आपको इसे शब्दशः टाइप करने के बजाय पिछले वाक्य में वर्णित अनुसार दर्ज करना होगा।

यह अभिव्यक्ति ^Mरिक्त स्ट्रिंग (यानी कुछ भी नहीं) के साथ होने वाली सभी घटनाओं को प्रतिस्थापित करेगी । मैं ^Mविंडोज से यूनिक्स (सोलारिस, लिनक्स, ओएसएक्स) की नकल की गई फाइलों से छुटकारा पाने के लिए इसका उपयोग करता हूं ।


9
बस मामले में आप विंडोज पर हैं, Ctrl + V को पेस्ट करने के लिए संभवतः मैप किया जाएगा। अगर ऐसा है तो चूक "विशेष चरित्र से बचना" कुंजी को Ctrl + Q से हटा देती है।
आर। मार्टिनो फर्नांडिस

8
असली सवाल यह है कि विम कभी-कभी स्वचालित रूप से लाइन एंडिंग का पता क्यों लगाता है और कभी-कभी सही ढंग से प्रदर्शित नहीं होता है।
स्कॉट

10
^Mयदि फ़ाइल में बेमेल लाइन अंत है, तो आप वर्ण देखेंगे । टोमाज़ द्वारा प्रदान की गई कमांड का उपयोग करें, फिर :fileformat={unix|dos|mac}उस ओएस पर निर्भर करें जिस पर आप लक्षित कर रहे हैं। यदि ^Mचरित्र के बिना कुछ ही लाइनें हैं , तो आप शायद चाहते हैं :fileformat=dos। यदि आप विम के अलावा किसी अन्य संपादक में फ़ाइलों को संपादित कर रहे हैं, तो सुनिश्चित करें कि यह मैच लाइन एंडिंग से कॉन्फ़िगर किया गया है (नोटपैड ऐसा नहीं करेगा, लेकिन नोटपैड ++ या टेक्स्टमैट जैसे किसी भी सम्मानित संपादक)।
मिकेल पॉलसन

9
शुरुआती के लिए ध्यान दें vi, उस आदेश को मैन्युअल रूप से टाइप करने की आवश्यकता है। बस इसे viचलाने के साथ एक खुले टर्मिनल में चिपकाने के परिणामस्वरूप "पैटर्न नहीं मिला" त्रुटि होगी।
IQAndreas

51
@bluesm मुझे वास्तव :%s/\r//gमें अपनी फ़ाइल में गाड़ी के रिटर्न को बदलने के लिए उपयोग करने की आवश्यकता थी । ^ V ^ M पैटर्न उस फ़ाइल में नहीं पाया जा सकता था जिसमें मेरे पास ^ M वर्णों का एक गुच्छा था।
jonnybot

139
:%s/\r//g 

आज मेरे लिए काम किया। लेकिन मेरी स्थिति थोड़ी अलग हो सकती थी।


1
g विकल्प की आवश्यकता नहीं है, प्रति पंक्ति केवल एक नई पंक्ति है। :%s/\r//पर्याप्त होगा।
मेंढक

7
जी विकल्प बहुत अच्छी तरह से आवश्यक हो सकता है, क्योंकि एक गाड़ी वापसी जरूरी नहीं कि एक नई रेखा है। जब यूनिक्स मोड में खोला जाता है, तो गाड़ी वापसी केवल एक और चरित्र होता है, और जब विंडोज मोड में खोला जाता है, तो लाइन फीड के तुरंत बाद गाड़ी वापसी विशेष होती है।
जोनाथन बाल्डविन

65

इसे हटाने के बजाय नई लाइन का अनुवाद करने के लिए:

:%s/\r/\r/g

2
यह वास्तव में क्या करने वाला है? मेरे लिए ऐसा लगता है कि यह जैसे के लिए पसंद का प्रतिस्थापन कर रहा है, जिसकी मैं कल्पना नहीं कर सकता कि कुछ भी बदल जाएगा। क्या मुझे कुछ खास याद आ रहा है कि यहाँ वाक्य रचना कैसे काम करती है?
प्लैटिनम

16
@Pl PlatinumAzure मुझे नहीं पता कि कभी किसी ने आपके सवाल का जवाब देने के लिए क्यों नहीं सोचा। \rखोज भाग बनाम प्रतिस्थापित भाग में भिन्न व्यवहार होता है। उदाहरण के लिए stackoverflow.com/a/3834303 देखें ।

या यहाँ:%s/^V^M/^V^M/g देखें
टमाटर 13

@TomD लिंक उस उत्तर को संदर्भित करता है जिस पर आप टिप्पणी कर रहे हैं।
बेज़मैन

मेरे लिए इसने कष्टप्रद पात्रों को एक अतिरिक्त न्यूलाइन के साथ बदल दिया। @ dlk5730 उत्तर ने मेरे लिए बेहतर काम किया। यानी:%s/\r//g
marcusshep

37

इसका शायद मतलब है कि आपको गाड़ी का रिटर्न मिला है (विभिन्न ऑपरेटिंग सिस्टम लाइन के अंत के संकेत के विभिन्न तरीकों का उपयोग करते हैं)।

dos2unixफ़ाइलों को ठीक करने या vim में फ़ाइलफ़ॉर्म सेट करने के लिए उपयोग करें :

set ffs=unix,dos

19

मान लें कि आपकी पाठ फ़ाइल - file.txt है, तो इस कमांड को चलाएं -

dos2unix file.txt 

यह टेक्स्ट फाइल को डॉस से यूनिक्स फॉर्मेट में कनवर्ट करता है।


अच्छी तरह से काम !
robe007

9

मुझे मूल रूप से मैक उपयोगकर्ता के माध्यम से विंडोज मशीन पर उत्पन्न एक टेक्स्ट फाइल मिली और load dataकमांड का उपयोग करके इसे लिनक्स MySQL DB में आयात करने की आवश्यकता थी ।

यद्यपि VIM ने '^ M' वर्ण प्रदर्शित किया है, उपरोक्त में से कोई भी मेरी विशेष समस्या के लिए काम नहीं करता है, डेटा आयात करेगा लेकिन किसी तरह से हमेशा दूषित था। अंत में समाधान बहुत आसान था (बहुत हताशा के बाद)।

सॉल्यूशन: उसी फाइल पर dos2unix दो टूक टोटकों को अंजाम दिया! fileकमांड का उपयोग करना दिखाता है कि रास्ते में क्या हो रहा है।

$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators

$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text

और फ़ाइल का अंतिम संस्करण डेटाबेस में पूरी तरह से आयात किया गया है।


9

यूनिक्स में संभवतः 'ट्र' कमांड का उपयोग करना अधिक आसान है।

cat file1.txt | tr "\r" "\n" > file2.txt

9

मैंने उन सभी को सेड के साथ निकाला:

sed -i -e 's/\r//g' <filename>

एक अलग स्ट्रिंग या चरित्र के साथ भी बदल सकता है:

sed -i -e 's/\r/string/g' <filename>

वे sedआदेश GNU / Linux संस्करण पर काम करते हैं, sedलेकिन BSDs (macOS सहित) पर ट्विकिंग की आवश्यकता हो सकती है।


4

आप इसे vim का उपयोग करके ठीक कर सकते हैं

:1,$s/^V^M//g

जहां ^ नियंत्रण चरित्र है।


2
यह नहीं समझाता है कि क्या ^Mहै।
हल्की दौड़ ऑर्बिट

2
वह वास्तव में नहीं पूछ रहा है कि यह क्या है, वह पूछ रहा है कि इसे कैसे ठीक किया जाए। क्या यह एक गाड़ी वापसी चरित्र DOS से है।
स्कॉट सी विल्सन

3
मुझे पता है कि यह क्या है। प्रश्न का शीर्षक "क्या करता है ^ वी चरित्र का अर्थ विम में है"।
ऑर्बिट


2

यह आपके विन्यास टूट जाता है, और ^ एम वर्ण मैपिंग में आवश्यक हैं, तो आप बस से ^ एम पात्रों की जगह ले सकता <Enter>या यहाँ तक कि<C-m> (दोनों को सरल वर्ण अनुक्रमों के रूप में टाइप कर सकते हैं, इसलिए क्रमशः 7 और 5 वर्णों को बदल सकते हैं)।

यह मैपिंग में विशेष कीकोड्स को संग्रहीत करने का एकल अनुशंसित, पोर्टेबल तरीका है


2

FreeBSD में, आप ^Mनिम्न लिखकर मैन्युअल रूप से साफ़ कर सकते हैं :

:%s/ Ctrl+ V, फिर Ctrl+ M, फिर Ctrl+ Mफिर।


1

यदि आपने fileformatजानबूझकर ( :e ++ff=unixविंडोज फ़ाइल के लिए) अलग-अलग निर्दिष्ट नहीं किया है , तो संभावना है कि लक्ष्य फ़ाइल में ईओएल मिलाया गया हो।

उदाहरण के लिए, यदि किसी फ़ाइल में <CR><NL>एंडिंग के साथ कुछ लाइनें हैं और <NL>एंडिंग के साथ अन्य हैं, और इसे पढ़ते समय विम द्वारा स्वचालित रूप से fileformatसेट किया unixगया है, ^M (<CR>)दिखाई देगा। ऐसे मामलों में, fileformatsखेल में आता है। देखें :help ffsजानकारी के लिए।


0

मुझे पता चला है कि मैं इस तथ्य के कारण हफ्तों से फाइलों को प्रदूषित कर रहा हूं कि मेरे होमब्रेव एमविम उदाहरण को फिलेटाइप = एनओएस का उपयोग करने के लिए सेट किया गया था। .Vimrc में आवश्यक परिवर्तन किए ...।


0

कोशिश करो :%s/\^M//कम से कम मेरे लिए यह काम किया।

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