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 में निकालें !
sed
MacOS पर उपयोग करने के लिए , यह करें:
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)
जादू। मैं गहराई से आभारी हूं