ये ^ M क्या हैं जो मेरी फाइलों में emacs में दिखाते रहते हैं?


157

इसलिए मुझे लगता है कि इसे टेक्स्टमेट के साथ करना पड़ सकता है, लेकिन हम एक छोटी सी टीम में काम करते हैं और कुछ समरूप फ़ाइलों के फुल-फाइल टकराव के साथ कुछ समस्याएँ हैं क्योंकि प्रत्येक शाखा की प्रत्येक पंक्ति में एक ^ M है।

यह रहस्यमय ^Mचरित्र क्या करने वाला है, और यह कहां से आ सकता है?

हमारे डेवलपर्स विंडोज / मैक पर एमएसीएस, मैक पर टेक्स्टमैट, मैक पर कोडा और कभी-कभी डब्ल्यूपी-एडमिन टेक्स्ट एडिटर का उपयोग करते हैं।

किसी को भी कभी भी इस मुद्दे को उन में से एक है?


3
इसके लायक क्या है: ^ के बजाय "ctrl" के लिए खोजें
ब्रैम

3
बड़ा मुद्दा यह है कि आप इसके बारे में क्या करने जा रहे हैं? संभावना है, Emacs उन्हें शुरू नहीं कर रहा है। आपकी टीम को यह तय करना चाहिए कि फाइलें DOS प्रारूप की होनी चाहिए या नहीं (^ ^ M) या Unix प्रारूप (कोई ^ M) होनी चाहिए, और इसे लागू करें।
ट्रे जैक्सन

जवाबों:


111

में Git-config , सेट core.autocrlfकरने के लिए trueGit स्वचालित रूप से, उदाहरण के लिए अपने मंच के लिए सही ढंग से लाइन अंत कन्वर्ट एक वैश्विक सेटिंग के लिए इस आदेश को चलाने बनाने के लिए:

git config --global core.autocrlf true

6
मुझे लगता है कि यह सबसे अच्छा जवाब है क्योंकि यह ओपी के संदर्भ में सवाल का जवाब देता है, अर्थात् गिट।
नेणतापीर

मैं पहले से ही था "[कोर] \ N autocrlf = सच" मेरे '~ / .gitconfig' फ़ाइल में, लेकिन यह अभी भी जाने के लिए मुझे 'Git क्लोन code.google.com/p/pytomtom ' के साथ '^ मीटर' वर्ण ??? ??
बिग रिच

11
यह उत्तर केवल तभी लागू होता है यदि आपका प्लेटफ़ॉर्म विंडोज़ है! यदि आप मैक / लिनक्स पर काम करते हैं, तो "सच" "इनपुट" बन जाना चाहिए! Help.github.com/articles/dealing-with-line-endings और यहां देखें : stackoverflow.com/questions/9225599/…
K.-Michael Aye

चेतावनी: यह उत्तर तब कई अन्य फ़ाइलों को दूषित करता है जब गलत तरीके से "अनुमान" लगता है कि लाइन-एंडिंग महत्वहीन हैं और इसे बदलने की आवश्यकता है। यह सॉफ्टवेयर प्रोजेक्ट्स के लिए घातक है जहां ये अक्षर एक डेटा फ़ाइल में मौजूद हैं (हाँ, मुझे इससे जला दिया गया है, जो अन-ब्रेक के लिए दर्दनाक है)। यह एक भयानक समाधान IMHO है।
एडम

@ एडम आखिर लाइन एंडिंग का परिवर्तन क्या है? डेटा के साथ काम करते समय आपको कहां समस्या थी? यह कुछ भी प्रभावित नहीं करना चाहिए, यह पंक्ति के अंत को चिह्नित करने का सिर्फ एक अलग तरीका है। मैं बस विचार करता हूँ।
MBI

97

कोई व्यक्ति अपने लाइन-एंडिंग कैरेक्टर्स को सही तरीके से नहीं बदल रहा है

मुझे लगता है कि यह विंडोज लोक है क्योंकि वे अपने CRLF से प्यार करते हैं। यूनिक्स LF को पसंद करता है और मैक CR को प्यार करता है जब तक कि इसे यूनिक्स तरीके से नहीं दिखाया गया।


12
स्पष्टीकरण के लिए: मैक ने सीआर का उपयोग संस्करण 10 (ओएस एक्स) तक किया था, अब यह एलएफ का उपयोग करता है।
मिकेल एस

34
मुझे लगता है कि Windows तरीका अधिक तार्किक है, क्योंकि CR और LF शब्द टाइपराइटर के दिनों से आते हैं। आपको दोनों करना था: एक गाड़ी वापसी लाइन की शुरुआत के लिए टाइपिंग पॉइंट और एक लाइन नीचे स्क्रॉल करने के लिए एक लाइन फीड प्राप्त करने के लिए। एक टाइपराइटर पर मैक ओएस क्लासिक तरीका (सीआर) बस एक ही लाइन पर लिखना जारी रखेगा। टाइपराइटर पर यूनिक्स तरीका (LF) पृष्ठ की पूरी चौड़ाई तक पहुंचने तक कंपित पाठ का उत्पादन करेगा। :)
Otherside

114
@ पंख: केवल "हम एक टाइपराइटर का भाव बनाना चाहते हैं" में अधिक तार्किक है। मैं यह समझना शुरू नहीं कर सकता कि क्यों अब और भी उपयोगी है।
ब्रायन ओकली

29
@ यह पता लगाएं कि जब आप किसी एक पात्र के साथ प्रतिनिधित्व कर सकते हैं तो आप दो वर्णों के साथ किसी चीज़ का प्रतिनिधित्व क्यों करेंगे?
मैथ्यू जी

13
@ मैथ्यू जी: सब कुछ एक चरित्र में दर्शाया जा सकता है, जब तक कि हम में से बहुत से लोग इस पर सहमत नहीं हो जाते। क्या इसका मतलब हमें होना चाहिए? हम अपने सभी संदेशों को विराम चिह्न, राजधानियों और हर वाक्य को नई पंक्ति में टाइप कर सकते हैं, और हर कोई इसे समझ जाएगा। क्या इसका मतलब हमें होना चाहिए? यह "कुछ करने के कारण नहीं है क्योंकि हम कर सकते हैं"। उन्होंने कहा, मैं LF को भी पसंद करता हूं।
जफोग

33

^Mहै 0x0d, गाड़ी वापसी चरित्र अर्थात्। अगर आपका डिस्प्ले कैसा दिखता है

पंक्ति 1 ^ एम
पंक्ति 2 ^ एम

तब फ़ाइल विंडोज से आ गई होगी क्योंकि विंडोज पर मानक न्यूलाइन अनुक्रम CR LF( 0x0d 0x0a) है, जबकि मानक न्यूलाइन अनुक्रम पूरी तरह से LFयूनिटीज पर होता है।

यदि फ़ाइल एक मैक ओएस 9 या पहले के सिस्टम से आई थी, तो आप इसे इस रूप में देखेंगे

पंक्ति 1 ^ एमलाइन 2 ^ एम

क्योंकि गाड़ी के रिटर्न के बाद कोई लाइन फीड नहीं होगा।


28

G में M को गायब करने के लिए टाइप करें:

git config --global core.whitespace cr-at-eol

क्रेडिट: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/


1
कुछ भी नहीं बदलता है।
विवेक्स

3
जब केवल git का उपयोग करने पर डिस्प्ले से ^ M गायब हो जाता है, लेकिन यह अभी भी है
फर्नांडो

1
वास्तव में, यह केवल ^ M को व्हॉट्सएप के रूप में प्रदर्शित करता है, लेकिन फिर git diffभी फाइलों की तुलना करते समय ^ M को ध्यान में रखता है। इस थ्रेडgit config --global --unset core.whitespace से ( इस थ्रेड से ) निकालें ।
मिगेलमोरिन

1
आप --globalकेवल वर्तमान रेपो को कॉन्फ़िगर करने के लिए भी छोड़ सकते हैं ।
डेरेक वीट

8

उन्हें डॉस स्टाइल लाइन एंडिंग और यूनिक्स स्टाइल के बीच अंतर करना होगा। की जाँच करें विकिपीडिया लेख । आप मदद करने के लिए एक dos2unix टूल ढूंढने में सक्षम हो सकते हैं, या बस उन्हें ठीक करने के लिए एक छोटी स्क्रिप्ट लिख सकते हैं।

संपादित करें : मुझे निम्नलिखित पायथन नमूना कोड यहां मिला :

string.replace( str, '\r', '' )

3
Emacs में, वह <code> M-: (प्रतिस्थापित-स्ट्रिंग "\ r" "") </ code> होगा।
हुइआयुअन 18

7

मैं मैक ओएस पर एंड्रॉइड स्टूडियो (JetBrains IntelliJ IDEA ) का उपयोग कर रहा हूं और मेरी समस्या यह थी कि M ने GitHub पर मेरे पुल अनुरोध में कुछ फाइलों में दिखाना शुरू कर दिया था । मेरे लिए जो काम किया वह फाइल के लिए लाइन सेपरेटर बदल रहा था।

संपादक में वांछित फ़ाइल को खोलने के लिए जाने फ़ाइल जाने के लिए लाइन विभाजक तो आपके लिए सबसे अच्छा विकल्प का चयन (मेरे लिए यह था वामो - यूनिक्स और ओएस एक्स (\ N) )

अगले लेख के अनुसार यह समस्या ऑपरेटिंग सिस्टम के बीच भ्रमित लाइन एंडिंग का परिणाम है: http://jonathonstaff.com/blog/issues-with-line-endings/

और अधिक जानकारी आप यहाँ पा सकते हैं: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48

यहां छवि विवरण दर्ज करें


6

क्वेरी-रिप्लेसमेंट के बजाय आप Mx डिलीट-ट्रेलिंग-व्हाट्सएप का भी उपयोग कर सकते हैं


यह मेरे लिए काम नहीं किया ... मैंने सभी पाठ का चयन किया है और कमांड को चलाया है।
at देवम्बरीस

यह मेरे लिए काम किया। धन्यवाद। @devrimbaris, आपको कुछ भी चुनने की आवश्यकता नहीं है, आप बस कमांड चलाते हैं। 'M' मेटा की, या एस्केप की है। तो Mx बच रहा है तो x। फिर आप डिलीट-ट्रेलिंग-व्हाट्सएप, और हिट रिटर्न में टाइप करें।
एस्ट्रोमीटर

5

अपने ~/.emacs(या सर्वव्यापी) में निम्नलिखित बर्तन

(defun dos2unix ()
  "Replace DOS eolns CR LF with Unix eolns CR"
  (interactive)
    (goto-char (point-min))
      (while (search-forward "\r" nil t) (replace-match "")))

और तब आप बस इस्तेमाल कर पाएंगे M-x dos2unix


4

^MEmacs में लाइन के अंत में एक लाइन फीड (\ n) के बाद एक गाड़ी वापसी (\ r) का संकेत मिलता है। आप अक्सर यह देखेंगे कि यदि कोई व्यक्ति विंडोज़ पर फ़ाइलों का संपादन करता है (जहां लाइन का अंत गाड़ी वापसी और नईलाइन वर्णों का संयोजन है) और आप यूनिक्स या लिनक्स (जहां पंक्ति का अंत केवल एक नई पंक्ति वर्ण है) में संपादित करते हैं।

पात्रों का संयोजन आमतौर पर हानिकारक नहीं होता है। यदि आप स्रोत नियंत्रण का उपयोग कर रहे हैं, तो आप पाठ फ़ाइल चेकइन प्रारूप को कॉन्फ़िगर करने में सक्षम हो सकते हैं ताकि लाइनें आपके लिए जादुई रूप से समायोजित हो जाएं। वैकल्पिक रूप से, आप चेकइन और चेकआउट ट्रिगर का उपयोग करने में सक्षम हो सकते हैं जो स्वचालित रूप से आपके लिए फ़ाइलों को "ठीक" करेगा। या, आप बस चीजों को मैन्युअल रूप से समायोजित करने के लिए dos2unix जैसे उपकरण का उपयोग कर सकते हैं।


2

जैसा कि सभी ने उल्लेख किया है। यह अलग लाइन एंडिंग स्टाइल है। MacOSX यूनिक्स लाइन एंडिंग - यानी LF (लाइन फीड) का उपयोग करता है।

विंडोज सीआर (कैरिज रिटर्न) और एलएफ (लाइन फीड) दोनों का उपयोग लाइन समाप्त होने के रूप में करता है। चूंकि आप विंडोज़ और मैक दोनों का उपयोग कर रहे हैं, इसलिए समस्या से उपजा है।

यदि आप खिड़कियों में एक फ़ाइल बनाते हैं और फिर इसे मैक पर लाते हैं तो आप इन ^ M वर्णों को लाइनों के अंत में देख सकते हैं।

यदि आप उन्हें हटाना चाहते हैं तो आप बहुत आसानी से ईमेक में कर सकते हैं। बस ^ M वर्ण को हाइलाइट करें और कॉपी करें और क्वेरी करें- ^ M के साथ और किया।

EDIT: कुछ अन्य लिंक जो मदद के हो सकते हैं। http://xahlee.org/emacs/emacs_adv_tips.html

यह आपको एक विशेष प्रकार की लाइन-एंडिंग शैली का उपयोग करने के लिए emacs को कॉन्फ़िगर करने में मदद करता है। http://www.emacswiki.org/emacs/EndOfLineTips


2

मैं थोड़ी देर पहले इस मुद्दे पर भाग गया। ^ M एक कैरिज रिटर्न का प्रतिनिधित्व करता है, और Ctrl-Q Ctrl-Mइस पर खोज (यह एक शाब्दिक ^ M बनाता है) आपको Emacs के भीतर इस चरित्र को संभालने की अनुमति देगा। मैंने इन पंक्तियों के साथ कुछ किया:

M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]

2

यदि आपके पास अपने सिस्टम पर dos2unix उपयोगिता स्थापित नहीं है, तो आप विंडोज एंडलाइन वर्णों से छुटकारा पाने के लिए अपना खुद का बना सकते हैं:

vi ~/dos2unix.bash:

निम्नलिखित सामग्री के साथ

#!/bin/bash
tr -d '\r' < $1 > repl.tmp
mv -f repl.tmp $1

अपने ~ / .bashrc में, पंक्ति जोड़ें:

alias 'dos2unix=~/dos2unix.bash'

को लागू करने

dos2unix file_from_PC.txt

फ़ाइल वर्णों में ^ M अक्षर लाइनों के अंत में हटाए जाएंगे। आप जाँच कर सकते हैं कि आपके पास बिल्ली का उपयोग करके है या नहीं:

cat -v file_from_PC.txt

1

यह सभी देखें:

छुपकर H एम इन एमॅक्स

सावधान रहें अगर आप ^ M अक्षर को हटाकर अपनी टीम को फिर से सबमिट करना चाहते हैं। हो सकता है कि उन्हें गाड़ी के बिना रिटर्न वाली फाइल दिखाई दे।


0

मेरे लिए समाधान यह था कि इस Emacs Wiki लेख में पाए गए निम्नलिखित विशिष्ट प्रकार्य का उपयोग किया जाए ।

 (defun dos2unix ()
      "Not exactly but it's easier to remember"
      (interactive)
      (set-buffer-file-coding-system 'unix 't) )

M-x dos2unixबफ़र पर फ़ंक्शन को निष्पादित करें और फ़ाइल को सहेजें, सभी ^Mगायब हो जाएंगे।

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