^ प्रत्येक पंक्ति के अंत में एम


132

जब मैं लाइन के अंत में कभी-कभी विम और अन्य संपादकों का उपयोग करके स्रोत फ़ाइलों का संपादन कर रहा होता हूं, तो मुझे प्रत्येक पंक्ति के अंत में ये ^ M अक्षर मिलते हैं। मुझे लगता है कि इसका विंडोज़ और फिर लिनक्स में एक फाइल को संपादित करने के साथ कुछ करना है। मैं इन सभी को अपने आप कैसे निकाल सकता हूं?


18
ऐसा इसलिए है क्योंकि विंडोज एक लाइन ब्रेक का प्रतिनिधित्व करने के लिए दो-वर्ण अनुक्रम (आमतौर पर "\ r \ n") का उपयोग करता है, लेकिन UNIX / लिनक्स लाइन ब्रेक का प्रतिनिधित्व करने के लिए केवल दूसरे वर्ण "\ n" का उपयोग करता है। इसलिए जब आप लिनक्स एडिटर पर एक विंडोज टेक्स्ट फाइल को एडिट करते हैं, तो एडिटर अतिरिक्त कैरेक्टर्स को देखता है कि वह लाइन ब्रेक के हिस्से पर विचार नहीं करता है, इसलिए यह उन्हें रेंडर करने की कोशिश करता है और जो सामने आता है वह है ^ M।
डेविड

13
वहाँ यह है कि डेविड की तुलना में थोड़ा अधिक है। विम उन सभी को दिखाए बिना खुशी से डॉस लाइन एंडिंग के साथ एक टेक्स्ट फ़ाइल को संपादित करेगा ^M। Vim में DOS टेक्स्ट फ़ाइल को संपादित करते समय आपके पास एकमात्र संकेत यह है कि क्या आपके पास %{&ff}आपके statuslineविकल्प का मूल्य है। विम दिखाता है ^Mजब लाइन समाप्त होने वाली शैली मिश्रित होती है । इसका मतलब है कि आपने एक पाठ संपादक का उपयोग किया है जो विम के रूप में प्रेमी नहीं है, जिसने मौजूदा लाइन एंडिंग शैली का पालन नहीं किया है, क्योंकि विम डिफ़ॉल्ट रूप से होगा। यदि आप Windows पर Vim या इसके कुछ और कैलिबर का उपयोग करते हैं, तो आपको इस तरह की लाइन समाप्त नहीं होगी।
वॉरेन यंग

जवाबों:


128

कमांड के रूप में, टाइप करें

:%s/^M$//

(^ एम प्राप्त करने के लिए, ^ ^ ^ M दबाएं, जहां ^ ज्यादातर कीबोर्ड पर CTRL है)


62
भी है:% s / \ r $ // ^ वी ^ एम परेशानी से बचने के लिए
ग्लेन जैकमैन

8
या, एक चरित्र को बचाने::%s/\r$
'12

2
@sehe तकनीकी रूप से 2 पात्रों को बचाता है :)
क्रिस

@glennjackman, आपकी टिप बहुत आसान थी, क्योंकि मैं ^ V + ^ M पाने के लिए संघर्ष कर रहा था, ऐसा बिल्कुल भी नहीं हो रहा था। मुझे क्लिपबोर्ड में सभी सामग्री मिल रही थी (जैसा कि ^ हर बार प्रभावी था, फिर भी उन दोनों को प्राप्त करने के लिए विभिन्न रणनीतियों के साथ मेरे बार-बार प्रयास के बावजूद)।
इसका तेराघ्ग

86

डॉस लाइन एंडिंग को हटाने का एक आसान तरीका ffविकल्प का उपयोग करना है:

:set ff=unix
:wq

अब आपकी फ़ाइल अच्छे-पुराने-यूनिक्स-वे पर वापस आ गई है।

यदि आप डॉस लाइन-एंडिंग जोड़ना चाहते हैं (एक प्रिंटर को खुश रखने के लिए, या विंडोज मित्रों के साथ फ़ाइलें स्थानांतरित करें जिनके पास अच्छे उपकरण नहीं हैं) तो आप विपरीत दिशा में आसानी से जा सकते हैं:

:set ff=dos
:wq

8
vim को कोई भी ^ m, or \ r, या कोई अन्य लाइन एंडिंग नहीं मिल रही थी, लेकिन यह काम कर गया। धन्यवाद :)
SgtPooki

2
विम को कोई ^ M या \ r नहीं मिलेगा, लेकिन इसने मेरे लिए काम किया! थैंक्स @sarnold
7ochem

ऐसा प्रतीत होता है कि एकल चरित्र परिवर्तन के रूप में इसका पता लगाने के लिए गिट बहुत गूंगा है। मैंने इसे विम में चलाया और git diffहर लाइन हटाई गई और हर लाइन जोड़ी गयी: /
टॉमी

टॉमी, वह एक सीमा है diff, पर नहीं git
स्पाइडी

34

तुम यह केर सकते हो:

:set fileformats=dos

यह ^Mफ़ाइल को छुए बिना, छिपाएगा ।


17

Dos2unix नाम का एक प्रोग्राम है, जो आपके लिए स्ट्रिप होना चाहिए। विंडोज विभिन्न लाइन-एंडिंग कैरेक्टर्स का उपयोग करता है जिसके कारण ऐसा होता है।


6

यह मेरे लिए एक फ़ाइल में काम करता है जिसमें एक पंक्ति में सब कुछ था:

पहले सभी मैच खोजें

:%s/^M//

(पाने के लिए ^M, ^ V ^ M दबाएं, जहां ^ हैCtrl अधिकांश कीबोर्ड पर है)

फिर नए सिरे से बदलें

:%s//\r/g

संयुक्त कमान होगी:

:%s/^M/\r/g

धन्यवाद, सोच रहा था कि वास्तव में खोज-प्रतिस्थापन में Ctrl-M कैसे दर्ज किया जाए!
रोबोप्रोग

2

मैं fromdosउन्हें फिर से खोलने से पहले पीड़ित फ़ाइलों को चलाने के लिए । Tofrodos पैकेज fromdosका हिस्सा है ।


1

समस्या का मूल एफ़टीपी हस्तांतरण के माध्यम से हो सकता है। जब आप इन फ़ाइलों को एक बॉक्स से दूसरे में एफ़टीपी करते हैं, तो ASCII स्थानांतरण का उपयोग करना सुनिश्चित करें। कमांड का उपयोग करें "ASC।"


0
" put this in your ~/.vimrc file and :source ~/.vimrc
" then you can do: Dos2Unix
" dos2unix ^M
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, first save the file."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()

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