M एम को समाप्त करने वाली प्रत्येक पंक्ति पर विम दिखाता है
मैं इसे 'सामान्य' लाइनब्रेक से बदलने के लिए कैसे करूँ?
M एम को समाप्त करने वाली प्रत्येक पंक्ति पर विम दिखाता है
मैं इसे 'सामान्य' लाइनब्रेक से बदलने के लिए कैसे करूँ?
जवाबों:
यह केवल एक चीज है जो मेरे लिए काम करती है:
: ई ++ एफएफ = डॉस
इसे यहाँ पाया गया: http://vim.wikia.com/wiki/File_format
:e ++ff=dosइसके बाद :set ff=unixएंडिंग को एक साेन प्रारूप में परिवर्तित किया जाएगा।
:%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
और इसे विश्व स्तर पर (न केवल लाइन पर पहली घटना)।
:%s/<Ctrl-V><Ctrl-M>/\r/g(जहाँ \ r एक नई पंक्ति के साथ M को प्रतिस्थापित करता है)।
लिनक्स और मैक ओएस पर, निम्नलिखित काम करता है,
:%s/^V^M/^V^M/g
जहाँ का ^V^Mअर्थ है Ctrl+ V, फिर Ctrl+ M।
नोट: विंडोज पर आप शायद ^Qइसके बजाय उपयोग करना चाहते हैं ^V, क्योंकि डिफ़ॉल्ट रूप ^Vसे टेक्स्ट पेस्ट करने के लिए मैप किया जाता है।
%s/\r/\r/gमैकविम पर समान रूप से काम करने वाली फ़ाइल मिली जो केवल ^Mलाइनों के अंत में दिखाई दे रही है (मैकविम शब्दों में एक लंबी लाइन)। स्पष्ट रूप से \ r का अर्थ है इस कमांड के प्रतिस्थापन भागों के पैटर्न में अलग-अलग चीजें।
भीतर vim, फ़ाइल प्रारूप को देखें - DOS या Unix:
:set filetype=unix
:set fileformat=unix
फ़ाइल को बिना कैरेज रिटर्न (CR, ^ M) वर्णों के वापस लिखा जाएगा।
set ff=unixउसी तरह से एक छोटे से शॉर्टकट के रूप में ftएक शॉर्टकट के लिए हैfiletype
एक फाइल मैं BBEdit में देखा के साथ बनाया था MacVim का एक समूह को प्रदर्शित किया गया था ^Mनियमित लोगों को लाइन रिटर्न के बजाय। निम्नलिखित स्ट्रिंग ने समस्या को हल किया - आशा है कि इससे मदद मिलेगी:
:%s/\r/\r/g
यह दिलचस्प है क्योंकि मैं एक ही चरित्र के साथ लाइन ब्रेक की जगह ले रहा हूं, लेकिन मुझे लगता है कि विम को सही ढंग से प्रदर्शित करने के लिए एक ताज़ा \ r प्राप्त करने की आवश्यकता है। मुझे यह जानने के लिए दिलचस्पी होगी कि यह काम क्यों करता है।
\rपात्रों को प्रतिस्थापित करने के लिए लग रहा था । शिकायत नहीं है, वही मैं चाहता था। बस अजीब। \n\r
सबसे पहले, :set ff?अपनी फ़ाइल का फ़ाइल स्वरूप जानने के लिए उपयोग करें।
मुझे लगता है कि यह हो सकता है unix, तो समस्या यह है कि आपकी फ़ाइल fileformat=dosलाइन ^ "M ^ J" को पंक्ति के अंत में जोड़ने के साथ बनाई गई थी, लेकिन लाइन flieformat=unix^ से "^ J" को हटाने के साथ ही वहां "^ M" को छोड़कर पढ़ें ।
:e ++ff=dosअपनी फाइल के प्रारूप को यूनिक्स से डॉस में बदलने के लिए विम कमांड लाइन में बस इनपुट करें। यह समस्या को हल करना चाहिए। यदि नहीं, :%s/\r//gतो आपको मदद करनी चाहिए।
:e ++ff=dosतब :set ff=unixऔर:w
मैच के लिए ^ M वर्ण प्राप्त करने के लिए मुझे इसे नेत्रहीन रूप से चुनना था और फिर इसे पुनः प्राप्त करने के लिए क्लिपबोर्ड कमांड पर ओएस कॉपी का उपयोग करना होगा। आप प्रतिस्थापित कमांड को आज़माने से पहले चरित्र की खोज करके इसका परीक्षण कर सकते हैं।
/^M
पहले खराब लाइन का चयन करना चाहिए
:%s/^M/\r/g
कैरिज रिटर्न के साथ सभी गलत ^ एम को बदल देगा।
यह मैकवीम में फ़ंक्शन के रूप में है, जो जीवीएम 7 पर आधारित है।
संपादित करें:
मेरे विंडोज 10 मशीन पर फिर से यह समस्या आ रही है, जिसमें विंडोज के लिए उबंटू है, और मुझे लगता है कि यह फाइल के लिए फ़ाइलफॉर्म मुद्दों का कारण बन रहा है। इस मामले में एफएफ को यूनिक्स, मैक या डॉस में बदलने से ^ एम से ^ जे और फिर से वापस बदलने के अलावा कुछ नहीं हुआ।
इस मामले में समाधान:
:%s/\r$/ /g
:%s/ $//g
इस मार्ग पर जाने का कारण यह है कि मैं यह सुनिश्चित करना चाहता था कि मैं अपनी फ़ाइल के साथ गैर-विनाशकारी हो जाऊं। मेरे पास हो सकता है:%s/\r$//g लेकिन गाड़ी के रिटर्न को तुरंत हटा दिया था, और अप्रत्याशित परिणाम हो सकते थे। इसके बजाय हम एकवचन CR वर्ण, यहाँ एक ^ M वर्ण, एक स्थान में परिवर्तित करते हैं, और फिर लाइनों के अंत में सभी स्थान हटा देते हैं (जो मेरे लिए एक वांछनीय परिणाम है चाहे)
एक पुराने प्रश्न को पुनर्जीवित करने के लिए क्षमा करें, जो लंबे समय से उत्तर दिया गया है, लेकिन ऐसा प्रतीत होता है कि कुछ भ्रम हुआ था और मुझे लगा कि मैं इसमें से कुछ को स्पष्ट करने में मदद करूंगा क्योंकि यह Google खोजों में उच्च स्तर पर आ रहा है।
इनमें से किसी ने मेरे लिए काम नहीं किया, इसलिए मैंने यह कोशिश की, जिसने काम किया:
प्रकार :%s/
दबाएँ CTRL-VCTRL-M
प्रकार //g
दबाएँ Enter
तो Vim shoud में समग्र कमांड जैसा दिखता है :%s/^M//g
यह क्या करता है: :%s(खोज और बदलें) /^M/(वह प्रतीक) /(बिना किसी चार्ट के) g(विश्व स्तर पर)।
^ M Ctrl+ Vऔर द्वारा पुनः प्राप्त किया जाता है M, इसलिए करते हैं
s/^M//g
Ctrl का उपयोग करने की आवश्यकता के बिना:
:%s/\r$//
साधारण सी बात जो मेरे लिए काम करती है
dos2unix filename
मैंने इसे sed के साथ किया:
sed -i -e 's/\r/\n/g' filename
sed -e 's/\r/\n/g' <<< 'over and over'->oven and oven
sedलेकिन बीएसडी नहीं sed(जैसा कि ओएसएक्स पर पाया गया)। लाइनब्रीक को ठीक करने वाला कोई भी व्यक्ति शायद ऑपरेटिंग सिस्टम के मिश्रण के साथ काम कर रहा है, इसलिए जवाब कब काम करेगा, इसके बारे में स्पष्ट होना उपयोगी है।
क्या बस के बारे में:
:%s/\r//g
यह पूरी तरह से मेरे लिए काम किया।
यह क्या करता है बस सभी लाइनों के अंत को साफ करने के लिए, यह ^ एम को हटा देता है और यही वह है।
इस प्रश्न के कई अन्य उत्तर हैं, लेकिन फिर भी, निम्नलिखित मेरे लिए सबसे अच्छा काम करता है, क्योंकि मुझे एक कमांड लाइन समाधान की आवश्यकता थी:
vim -u NONE -c 'e ++ff=dos' -c 'w ++ff=unix' -c q myfile
स्पष्टीकरण:
myfile:e ++ff=dosडॉस लाइन के अंत के रूप में पूरी फ़ाइल को पुनः लोड करने के लिए लिए।:w ++ff=unixयूनिक्स लाइन अंत का उपयोग कर फ़ाइल लिखने के लिए चलाएँ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एक ध्वज अर्थ है" विश्व स्तर पर, "एक पंक्ति में पहली घटना के विपरीत।
यह मेरे लिए काम किया:
\nपंक्ति समाप्त)तो विम में:
:set ff=unix
:w
मेरे मामले में,
कुछ भी ऊपर काम नहीं किया, मेरे पास मेरे मैक से एक 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,
वैकल्पिक रूप से, ओपन-सोर्स यूटिलिटीज हैं जिन्हें dos2unix कहा जाता है और unix2dos उपलब्ध हैं जो यह बहुत काम करते हैं। एक लिनक्स सिस्टम पर वे संभवतः डिफ़ॉल्ट रूप से स्थापित होते हैं; विंडोज सिस्टम के लिए आप उन्हें http://www.bastet.com/ से दूसरों के बीच डाउनलोड कर सकते हैं।
इनमें से किसी एक कमांड का उपयोग करें:
:%s/\r//g
या
:%s/\r\(\n\)/\1/g
यह मेरे लिए काम किया:
:% s/\r\n/\r
इन सुझावों में से कोई भी मेरे लिए काम नहीं कर रहा ^Mथा, जो कि विम और ग्रहण दोनों के साथ काम करते हुए लाइन ब्रेक का भार उठाने में कामयाब रहा। मुझे संदेह है कि मुझे एक बाहरी मामले का सामना करना पड़ा, लेकिन मामले में यह किसी को भी मेरी मदद करता है।
:%s/.$//g
और इसने मेरी समस्या को हल कर दिया
:g/^M/s// /g
यदि आप का ^Mउपयोग कर टाइप करेंShift+6 Caps+M इसका यह स्वीकार नहीं होगा।
आपको टाइप करना है ctrl+v ctrl+m।
^Mअवांछित रेखा विराम देती है। इसे संभालने के लिए हम sedनिम्नानुसार कमांड का उपयोग कर सकते हैं :
sed 's/\r//g'
बस set binaryअपने .vimrc में निकालें !
sedMacOS पर उपयोग करने के लिए , यह करें:
sed -i.bak $'s/\r//' <filename>
स्पष्टीकरण:$'STRING' वाक्य रचना यहाँ bash खोल से संबंधित है। मैक \rविशेष चरित्र के रूप में नहीं मानते हैं । कमांड स्ट्रिंग को उद्धृत करके $''आप ANSI-C मानक में निर्दिष्ट \rवास्तविक \rवर्ण से बदलने के लिए शेल को बता रहे हैं ।
"यह फ़ंक्शन जंपर्स की सूची को संरक्षित करता है
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()
मैं एक दोपहर बिता रहा हूँ \ 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)
जादू। मैं गहराई से आभारी हूं