To एम लाइनब्रेक को विम में खोली गई फाइल में 'सामान्य ’लाइनब्रेक में कैसे बदलें?


481

M एम को समाप्त करने वाली प्रत्येक पंक्ति पर विम दिखाता है

मैं इसे 'सामान्य' लाइनब्रेक से बदलने के लिए कैसे करूँ?



3
कृपया फ़ाइलफ़ॉर्म में परिवर्तन का समाधान बदलें क्योंकि यह सबसे साफ़ समाधान है।
एरिकबवर्क

1
मुझे पता है कि यह सवाल विम के बारे में है, लेकिन कुछ अन्य Google खोज भी इस धागे में उतरती हैं। इसलिए, यदि आपने अपने सिस्टम पर एक्लिप्स स्थापित किया है, तो आप कुछ ही क्लिकों के साथ फाइल या पूर्ण फ़ोल्डर ट्री के लिए लाइन सीमांकक को परिवर्तित कर सकते हैं: stackoverflow.com/a/7019737/1364747
टैडी

मुझे पसंद है कि आप सामान्य लाइन ब्रेक को "सामान्य" कैसे कहते हैं - उन लोगों के विपरीत ^ एम लाइन टूटता है :-)
DerMike

जवाबों:


134

यह केवल एक चीज है जो मेरे लिए काम करती है:

: ई ++ एफएफ = डॉस

इसे यहाँ पाया गया: http://vim.wikia.com/wiki/File_format


Windows7 Vim7.4 पर काम किया
schuess

19
:e ++ff=dosइसके बाद :set ff=unixएंडिंग को एक साेन प्रारूप में परिवर्तित किया जाएगा।
मतीन उल्हाक

समाधान की प्रतिक्रिया ने मेरे लिए काम नहीं किया, केवल @MateenUlhaq कमांड ने मेरी मदद की।
एडेनशॉ

577

आदेश

:%s/<Ctrl-V><Ctrl-M>/\r/g

जहाँ का <Ctrl-V><Ctrl-M>अर्थ है Ctrl+ Vतो Ctrl+ M

व्याख्या

:%s

स्थानापन्न,% = सभी लाइनें

<Ctrl-V><Ctrl-M>

^ M अक्षर (Ctrl-V, Ctrl ^ वर्ण लिखने का एक विम तरीका है और Ctrl-M नियमित अभिव्यक्ति के बाद M लिखता है, जिसके परिणामस्वरूप ^ M विशेष वर्ण)

/\r/

नई लाइन के साथ (\r )

g

और इसे विश्व स्तर पर (न केवल लाइन पर पहली घटना)।


21
इसने ^ M अक्षर हटा दिए लेकिन गाड़ी का रिटर्न नहीं डाला।
भाग्यविद्या

14
@jumpnett - आपको कुंजी chords Ctrl-V / Ctrl-M को धकेलने की आवश्यकता है, इसे शब्दशः पाठ के रूप में दर्ज न करें।
लीपर्सस्किनपिलबॉक्स हाईट

33
यह निश्चित रूप से सवाल का सही जवाब है, अगर आपके पास ^ M एक नई लाइन है, तो आप नई लाइन रखना चाहते हैं, लेकिन ^ M को हटा सकते हैं। अपनी फ़ाइल को डबल-स्पेस से नीचे अन्य प्रतिस्थापन करना।
dlamblin

12
यदि आप अभी भी एक गाड़ी वापसी (यानी ^ M को हटा दिया गया है, लेकिन सब कुछ एक ही लाइन पर लिपटा हुआ है) गायब है, तो करें: :%s/<Ctrl-V><Ctrl-M>/\r/g(जहाँ \ r एक नई पंक्ति के साथ M को प्रतिस्थापित करता है)।
विलियम टरेल

7
यदि आप Windows पर Vim चला रहे हैं, तो आपको <Ctrl-V> के बजाय <Ctrl-Q> का उपयोग करना होगा।
ग्रैंडमाडिरल

418

लिनक्स और मैक ओएस पर, निम्नलिखित काम करता है,

:%s/^V^M/^V^M/g

जहाँ का ^V^Mअर्थ है Ctrl+ V, फिर Ctrl+ M

नोट: विंडोज पर आप शायद ^Qइसके बजाय उपयोग करना चाहते हैं ^V, क्योंकि डिफ़ॉल्ट रूप ^Vसे टेक्स्ट पेस्ट करने के लिए मैप किया जाता है।


3
यह एक पतन क्यों हुआ? यह तब भी काम करता है, जब आपकी फ़ाइल एक पंक्ति में मैश हो जाती है, क्योंकि यह गलत लाइन अंत है।
पॉल टॉम्बलिन

2
नहीं। मेरा तरीका सही लाइन अंत के साथ फाइल में लाइन अंत जो कुछ भी है, उसे बदल देता है।
पॉल टॉम्बलिन

7
यह एक अलग समस्या के लिए है जब आपकी फ़ाइल में कोई नई लाइनें नहीं हैं, जो मैं मानता हूं कि अधिक सामान्य है। FYI करें ^ M का मिलान \ r
dlamblin

12
यह एक गहरी रहस्यमय आज्ञा है, लेकिन यह मेरे लिए एक मैक पर काम करता है।
एरिक वॉकर

5
मुझे %s/\r/\r/gमैकविम पर समान रूप से काम करने वाली फ़ाइल मिली जो केवल ^Mलाइनों के अंत में दिखाई दे रही है (मैकविम शब्दों में एक लंबी लाइन)। स्पष्ट रूप से \ r का अर्थ है इस कमांड के प्रतिस्थापन भागों के पैटर्न में अलग-अलग चीजें।
रिचवेल

184

भीतर vim, फ़ाइल प्रारूप को देखें - DOS या Unix:

:set filetype=unix

:set fileformat=unix

फ़ाइल को बिना कैरेज रिटर्न (CR, ^ M) वर्णों के वापस लिखा जाएगा।


3
उपयोग: सेट फाइलफॉर्मैट = यूनिक्स अधिकांश विन्यास फिल्टाइप के लिए केवल वाक्य रचना प्रकार का उपयोग किया जा रहा है।
व्युत्पन्न

6
यह बग मैं तय कर रहा था ... विम ने सोचना शुरू कर दिया कि मेरी UNIX स्वरूपित फ़ाइल विंडोज़ थी और नई बदली हुई लाइनें g M इन git डिफरेंट ’दिखा रही थीं।
थॉमस हंटर II

सिस्टम पर निर्भर होना चाहिए। आज, यह एक काम किया। सेट कमांड vim, btw के भीतर किया जाता है।
गबरी

1
महान! क्योंकि
फ़ाइलफॉर्म

3
यह भी BTW vi पर काम करता है, और आप कर सकते हैं set ff=unixउसी तरह से एक छोटे से शॉर्टकट के रूप में ftएक शॉर्टकट के लिए हैfiletype
Posva

110

एक फाइल मैं BBEdit में देखा के साथ बनाया था MacVim का एक समूह को प्रदर्शित किया गया था ^Mनियमित लोगों को लाइन रिटर्न के बजाय। निम्नलिखित स्ट्रिंग ने समस्या को हल किया - आशा है कि इससे मदद मिलेगी:

:%s/\r/\r/g

यह दिलचस्प है क्योंकि मैं एक ही चरित्र के साथ लाइन ब्रेक की जगह ले रहा हूं, लेकिन मुझे लगता है कि विम को सही ढंग से प्रदर्शित करने के लिए एक ताज़ा \ r प्राप्त करने की आवश्यकता है। मुझे यह जानने के लिए दिलचस्पी होगी कि यह काम क्यों करता है।


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

यह मेरे लिए Windows gVim में ऐसी फ़ाइल को सॉर्ट करने के लिए काम करता है जिसमें कोई लाइन ब्रेक नहीं था, इसके बजाय बहुत सारे ^ M।
फ्लैश

2
इस पृष्ठ पर दिए गए सभी समाधानों में, यह एकमात्र पैटर्न था जिसने एक csv फ़ाइल से ^ M को हटाने में मेरे लिए काम किया। MacVim का उपयोग करना।
B6431

+1 ने मेरे लिए भी काम किया, जबकि मोबैटर्म
कार्ल

इसलिए, यह प्रतिस्थापन के रूप में निर्दिष्ट करने के बावजूद सभी \rपात्रों को प्रतिस्थापित करने के लिए लग रहा था । शिकायत नहीं है, वही मैं चाहता था। बस अजीब। \n\r
डोनट

34

सबसे पहले, :set ff?अपनी फ़ाइल का फ़ाइल स्वरूप जानने के लिए उपयोग करें।

मुझे लगता है कि यह हो सकता है unix, तो समस्या यह है कि आपकी फ़ाइल fileformat=dosलाइन ^ "M ^ J" को पंक्ति के अंत में जोड़ने के साथ बनाई गई थी, लेकिन लाइन flieformat=unix^ से "^ J" को हटाने के साथ ही वहां "^ M" को छोड़कर पढ़ें ।

:e ++ff=dosअपनी फाइल के प्रारूप को यूनिक्स से डॉस में बदलने के लिए विम कमांड लाइन में बस इनपुट करें। यह समस्या को हल करना चाहिए। यदि नहीं, :%s/\r//gतो आपको मदद करनी चाहिए।


3
मुझे दोनों करना था। :e ++ff=dosतब :set ff=unixऔर:w
अधिकतम

29

मैच के लिए ^ M वर्ण प्राप्त करने के लिए मुझे इसे नेत्रहीन रूप से चुनना था और फिर इसे पुनः प्राप्त करने के लिए क्लिपबोर्ड कमांड पर ओएस कॉपी का उपयोग करना होगा। आप प्रतिस्थापित कमांड को आज़माने से पहले चरित्र की खोज करके इसका परीक्षण कर सकते हैं।

/^M

पहले खराब लाइन का चयन करना चाहिए

:%s/^M/\r/g

कैरिज रिटर्न के साथ सभी गलत ^ एम को बदल देगा।

यह मैकवीम में फ़ंक्शन के रूप में है, जो जीवीएम 7 पर आधारित है।

संपादित करें:

मेरे विंडोज 10 मशीन पर फिर से यह समस्या आ रही है, जिसमें विंडोज के लिए उबंटू है, और मुझे लगता है कि यह फाइल के लिए फ़ाइलफॉर्म मुद्दों का कारण बन रहा है। इस मामले में एफएफ को यूनिक्स, मैक या डॉस में बदलने से ^ एम से ^ जे और फिर से वापस बदलने के अलावा कुछ नहीं हुआ।

इस मामले में समाधान:

:%s/\r$/ /g
:%s/ $//g

इस मार्ग पर जाने का कारण यह है कि मैं यह सुनिश्चित करना चाहता था कि मैं अपनी फ़ाइल के साथ गैर-विनाशकारी हो जाऊं। मेरे पास हो सकता है:%s/\r$//g लेकिन गाड़ी के रिटर्न को तुरंत हटा दिया था, और अप्रत्याशित परिणाम हो सकते थे। इसके बजाय हम एकवचन CR वर्ण, यहाँ एक ^ M वर्ण, एक स्थान में परिवर्तित करते हैं, और फिर लाइनों के अंत में सभी स्थान हटा देते हैं (जो मेरे लिए एक वांछनीय परिणाम है चाहे)

एक पुराने प्रश्न को पुनर्जीवित करने के लिए क्षमा करें, जो लंबे समय से उत्तर दिया गया है, लेकिन ऐसा प्रतीत होता है कि कुछ भ्रम हुआ था और मुझे लगा कि मैं इसमें से कुछ को स्पष्ट करने में मदद करूंगा क्योंकि यह Google खोजों में उच्च स्तर पर आ रहा है।


1
ctrl-v ctrl-m को दबाने से वर्ण डालने का काम हो सकता है, साथ ही fwiw। लेकिन \ r जो उचित कैरिज रिटर्न सम्मिलित करता है।
3

1
यह सही जवाब है। जैसा कि ऊपर कहा गया है, कमांड में सम्मिलित किए गए शाब्दिक ^ M को प्राप्त करने के लिए <ctrl-v> <ctrl-m> का उपयोग करें।
कारलोसियम

1
मैं सहमत हूँ, हालाँकि मैं निश्चित हूँ कि अगर वह मेरे लिए मूल पोस्टिंग के समय काम करता तो मैं पोस्ट नहीं करता। ;)
पैराग्राफर

22

इनमें से किसी ने मेरे लिए काम नहीं किया, इसलिए मैंने यह कोशिश की, जिसने काम किया:

प्रकार :%s/

दबाएँ CTRL-VCTRL-M

प्रकार //g

दबाएँ Enter

तो Vim shoud में समग्र कमांड जैसा दिखता है :%s/^M//g

यह क्या करता है: :%s(खोज और बदलें) /^M/(वह प्रतीक) /(बिना किसी चार्ट के) g(विश्व स्तर पर)।


धमाका करें!! मैक पर काम करता है।
shamail


15

Ctrl का उपयोग करने की आवश्यकता के बिना: :%s/\r$//


1
यही तरीका है कि मैं इसे भी करता हूं। मुझे बस कभी भी कमांड याद नहीं है
पिक्सेल 67

इन अंत को हटाने के लिए यह अनुशंसित तरीका है।
मेटाग्राफर


12

मैंने इसे sed के साथ किया:

sed -i -e 's/\r/\n/g' filename


क्या आपको यकीन है कि यह काम करता है? OSX पर: sed -e 's/\r/\n/g' <<< 'over and over'->oven and oven
आर्मंड

हां यह काम करता है (मैं इसका बहुत उपयोग करता हूं), लेकिन ओएसएक्स पर अगर आपके पास सेड का जीएनयू संस्करण नहीं है तो यह काम नहीं कर सकता है। जीडीयू संस्करण की तुलना में सीड का संस्करण जो डिफ़ॉल्ट रूप से ऐप्पल जहाज बहुत अलग (दुख की बात है) सभी लिनक्स डिस्ट्रोस पर जहाज करता है। अधिक सहायता के लिए इस प्रश्न के उत्तर की जाँच करें: stackoverflow.com/q/30003570/2062384
Freedom_Ben

साभार @Freedom_Ben तो ऐसा लगता है कि यह जीएनयू के लिए काम करता है, sedलेकिन बीएसडी नहीं sed(जैसा कि ओएसएक्स पर पाया गया)। लाइनब्रीक को ठीक करने वाला कोई भी व्यक्ति शायद ऑपरेटिंग सिस्टम के मिश्रण के साथ काम कर रहा है, इसलिए जवाब कब काम करेगा, इसके बारे में स्पष्ट होना उपयोगी है।
आर्मंड

10

क्या बस के बारे में: :%s/\r//g यह पूरी तरह से मेरे लिए काम किया।

यह क्या करता है बस सभी लाइनों के अंत को साफ करने के लिए, यह ^ एम को हटा देता है और यही वह है।


9

इस प्रश्न के कई अन्य उत्तर हैं, लेकिन फिर भी, निम्नलिखित मेरे लिए सबसे अच्छा काम करता है, क्योंकि मुझे एक कमांड लाइन समाधान की आवश्यकता थी:

vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile

स्पष्टीकरण:

  • किसी भी .vimrc फ़ाइलों को लोड किए बिना, खोलें myfile
  • Daud :e ++ff=dosडॉस लाइन के अंत के रूप में पूरी फ़ाइल को पुनः लोड करने के लिए लिए।
  • :w ++ff=unixयूनिक्स लाइन अंत का उपयोग कर फ़ाइल लिखने के लिए चलाएँ
  • विम छोड़ो

3
धन्यवाद! इसने मेरे मुद्दे को ठीक किया और इसे स्क्रिप्ट में उपयोग करने के लिए उपयोगी पाया
पेद्दिपगा

8

Ctrl+ Mअपनी खिड़की को कम करता है, लेकिन Ctrl+ Enterवास्तव में एक सम्मिलित करता है ^Mचरित्र। मुझे यह भी सुनिश्चित करना था कि मैं Ctrlप्रेस के बीच की चाबी को न उठाऊं।

तो मेरे लिए समाधान था:

:%s/<Ctrl-V><Ctrl-Enter>/\r/g

कहाँ <Ctrl-V><Ctrl-Enter>करने के लिए साधन प्रेस और पकड़ Ctrl , प्रेस और रिहाई V, प्रेस और रिहाई Enter, और फिर रिहाई Ctrl

यदि आप विंडोज-जेनरेट की गई फाइल पर काम कर रहे हैं

उपरोक्त समाधान मौजूदा लाइनों के बीच एक अतिरिक्त रेखा जोड़ देगा, क्योंकि इसके \rबाद पहले से ही एक अदृश्य है ^M

इसे रोकने के लिए, आप ^Mवर्णों को हटाए बिना उन्हें हटाना चाहते हैं।

:%s/<Ctrl-V><Ctrl-Enter>//g

जहां %"इस बफ़र में", का sअर्थ है "स्थानापन्न," का /अर्थ है "(खोजें) निम्नलिखित पैटर्न," चरित्र <Ctrl-V><Ctrl-Enter>को प्राप्त करने के लिए प्रेस करने के लिए कुंजी को संदर्भित करता है ^M(ऊपर देखें), का //अर्थ है "कुछ नहीं के साथ" (या, "पैटर्न के साथ इन दो स्लैशों के बीच, जो खाली है "), और gएक ध्वज अर्थ है" विश्व स्तर पर, "एक पंक्ति में पहली घटना के विपरीत।


7

यह मेरे लिए काम किया:

  1. फ़ाइल स्वरूप को यूनिक्स पर सेट करें ( \nपंक्ति समाप्त)
  2. फ़ाइल सहेजें

तो विम में:

:set ff=unix
:w

1
यह मेरे लिए काम किया, जबकि स्वीकृत जवाब नहीं था।
मार्सेलो रोमानी

7

मेरे मामले में,

कुछ भी ऊपर काम नहीं किया, मेरे पास मेरे मैक से एक CSV फाइल थी जिसे लिनक्स मशीन में कॉपी किया गया था और मैंने उपरोक्त सभी कमांडों का उपयोग किया था लेकिन कुछ भी मदद नहीं की लेकिन नीचे दी गई

tr "\015" "\n" < inputfile > outputfile

मेरे पास एक फाइल थी जिसमें ^ M अक्षर नीचे की तरह लाइनों के बीच सैंडविच थे

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

5

वैकल्पिक रूप से, ओपन-सोर्स यूटिलिटीज हैं जिन्हें dos2unix कहा जाता है और unix2dos उपलब्ध हैं जो यह बहुत काम करते हैं। एक लिनक्स सिस्टम पर वे संभवतः डिफ़ॉल्ट रूप से स्थापित होते हैं; विंडोज सिस्टम के लिए आप उन्हें http://www.bastet.com/ से दूसरों के बीच डाउनलोड कर सकते हैं।


5
sed s/^M//g file1.txt > file2.txt

जहाँ ^ M एक साथ 3 कुंजी दबाकर टाइप किया जाता है, ctrl + v + m


4

dos2unix यूटिलिटी का उपयोग करें यदि फ़ाइल विंडोज़ पर बनाई गई थी, तो mac2unix यूटिलिटी का उपयोग करें यदि फ़ाइल मैक पर बनाई गई थी। :)


पहले mac2unix के बारे में कभी नहीं सुना, अगर मैं कर सकता तो फिर से उखाड़ फेंकता!
कुफ

Huray! जाने का यह रास्ता है!
प्राइवेट



1

करने के लिए कीस्ट्रोक्स को बचाने , इससे आप लिखना से बच सकते हैं Ctrl+ VCtrl+ Mएक मानचित्रण में इस रखकर। बस एक फ़ाइल खोलें, जिसमें M वर्ण हो, उसे yank करें, और इसे अपने .vimrc में इस तरह एक पंक्ति में पेस्ट करें:

nnoremap <Leader>d :%s/^M//g<CR>

1

इन सुझावों में से कोई भी मेरे लिए काम नहीं कर रहा ^Mथा, जो कि विम और ग्रहण दोनों के साथ काम करते हुए लाइन ब्रेक का भार उठाने में कामयाब रहा। मुझे संदेह है कि मुझे एक बाहरी मामले का सामना करना पड़ा, लेकिन मामले में यह किसी को भी मेरी मदद करता है।

:%s/.$//g

और इसने मेरी समस्या को हल कर दिया


यह किसी भी वर्ण को पंक्ति के अंत में हटा देगा। यदि आपके पास एक पंक्ति है जो किसी कारण से, ^ M द्वारा समाप्त नहीं है, तो आप उस चरित्र को भी हटा देंगे, और अप्रत्याशित होगा। यह मामला नहीं होना चाहिए, लेकिन इस घटना में कि यह है, और आप यह नहीं जानते हैं, तब आप अपनी फ़ाइल को पहचानने के लिए बहुत मुश्किल से अपनी फ़ाइल को सॉल्व कर सकते हैं।
14

1
:g/^M/s// /g

यदि आप का ^Mउपयोग कर टाइप करेंShift+6 Caps+M इसका यह स्वीकार नहीं होगा।

आपको टाइप करना है ctrl+v ctrl+m


1

^Mअवांछित रेखा विराम देती है। इसे संभालने के लिए हम sedनिम्नानुसार कमांड का उपयोग कर सकते हैं :

sed 's/\r//g'

idk क्यों यह -1 के लिए नीचा दिखाया गया था ... क्योंकि यह sed का उपयोग करता है? आप विम के अंदर एक ही प्रतिस्थापन कर सकते हैं और इसे काम करना चाहिए
मेटाग्राफर

1

बस set binaryअपने .vimrc में निकालें !


एक अन्य धागे में, "सेट बाइनरी" को नई लाइन के ऑटो डालने से छुटकारा पाने की सिफारिश की गई थी।
dexter2305

1

sedMacOS पर उपयोग करने के लिए , यह करें:

sed -i.bak $'s/\r//' <filename>

स्पष्टीकरण:$'STRING' वाक्य रचना यहाँ bash खोल से संबंधित है। मैक \rविशेष चरित्र के रूप में नहीं मानते हैं । कमांड स्ट्रिंग को उद्धृत करके $''आप ANSI-C मानक में निर्दिष्ट \rवास्तविक \rवर्ण से बदलने के लिए शेल को बता रहे हैं ।


0

"यह फ़ंक्शन जंपर्स की सूची को संरक्षित करता है

fun! Dos2unixFunction()
let _s=@/
let l = line(".")
let c = col(".")
try
    set ff=unix
    w!
    "%s/\%x0d$//e
catch /E32:/
    echo "Sorry, the file is not saved."
endtry
let @/=_s
call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

इस मामले में, * NIX के देशी dos2unix कमांड का उपयोग करने में क्या गलत है? linux.die.net/man/1/dos2unix
पैराग्राफर

0

मैं एक दोपहर बिता रहा हूँ \ n ctrl-v 012 (दोनों में से जो मुझे अशक्त करते हैं) के साथ संघर्ष करते हुए। इस धागे के माध्यम से जब तक कि मैं पैराग्राफर तक नहीं पहुँच जाता, तब तक के लिए इसे पूरा कर लिया।

\r मेरे लिए ठीक काम किया!

/),/s/),/)\r/g

कुछ इस तरह से हुआ:

ब्लैकलिस्ट-अतिरिक्त: i386 (0.4.1, 0.4.1 + nmu1), libmount1: i386 (2.20.1-5.1, 2.20.1 -5.2), libblkid1: i386 (2.20.1-5.1, 2.20.1-5.2) , libapt-pkg4.12: i386 (0.9.7.4, 0.9.7.5), nmap: i386 (6.00-0.1, 6.00-0.2), लिबासन-आम: i386 (1.0.22-7.3),

कुछ इस तरह से:

26 लिबव्व-1.2-4: i386 (1.2.9-3, स्वचालित)
27 ओपनज्डक -6-जार-हेडलेस: i386 (6b24-1.11.4-3, स्वचालित)
28 जेड: i386 (0.99.1-2-2.1)

जादू। मैं गहराई से आभारी हूं

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