ما هي ملفات ^M التي تستمر في الظهور في ملفاتي في emacs؟

StackOverflow https://stackoverflow.com/questions/1822849

  •  10-07-2019
  •  | 
  •  

سؤال

لذلك أعتقد أن الأمر قد يكون له علاقة بـ textmate، لكننا نعمل في فريق صغير ونواجه بعض المشكلات المتعلقة بتعارضات الملفات الكاملة لملفات متطابقة تقريبًا في git لأن كل سطر من فرع واحد يحتوي على ^M ملحق به.

ما هذا الغامض ^M الشخصية التي من المفترض أن تفعلها، ومن أين يمكن أن تأتي؟

يستخدم مطورونا emacs على Windows/Mac، وTextMate على Mac، وcoda على Mac، وأحيانًا محرر النصوص wp-admin.

أي شخص لديه هذه المشكلة الناجمة عن واحد من هؤلاء؟

هل كانت مفيدة؟

المحلول

شخص ما لم يتم تحويل الأحرف تنتهي خطهم بشكل صحيح .

وأفترض أنها القوم ويندوز كما أنهم يحبون CRLF بهم. يونكس يحب LF وماك أحب CR حتى اتضح الطريق يونكس.

نصائح أخرى

في href="http://git-scm.com/docs/git-config" بوابة بين التكوين ، تعيين core.autocrlf إلى true لجعل بوابة تحويل خط النهايات تلقائيا صحيح النظام الأساسي الخاص بك، على سبيل المثال تشغيل هذا الأمر لإعداد عمومي:

git config --global core.autocrlf true

و^M هو 0x0d، أي حرف الإرجاع. إذا كان العرض يشبه

line 1^M
line 2^M

وثم الملف يجب ان يأتي من ويندوز لتسلسل السطر الجديد القياسية على نظام التشغيل Windows هو CR LF (0x0d 0x0a) في حين أن تسلسل السطر الجديد القياسية يتكون فقط من LF على Unices.

وإذا كان الملف قد حان من نظام ماك OS 9 أو في وقت سابق، وكنت أرى أنها

line 1^Mline 2^M

وأنه لن يكون هناك أي خط يغذي بعد الإرجاع.

ولديهم علاقة مع الفرق بين النهايات خط النمط DOS وأسلوب يونكس. تحقق من ويكيبيديا المقالة . قد تكون قادرة على العثور على أداة dos2unix للمساعدة، أو ببساطة كتابة سيناريو صغير لاصلاحها نفسك.

تعديل : في وجدت بيثون نموذج التعليمات البرمجية التالية هنا :

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

وبدلا من استعلام استبدال يمكنك استخدام أيضا M-س-حذف زائدة بيضاء

وعاء ما يلي في ~/.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.

و^M في نهاية خط في إيماكس ويشير حرف إرجاع (\ ص) تليها تغذية خط (\ ن). كنت كثيرا ما سترى هذا إذا شخص واحد بتحرير الملفات على ويندوز (حيث نهاية الخط هو مزيج من إرجاع وأحرف السطر)، وقمت بتحرير في يونكس أو لينكس (حيث نهاية الخط ليست سوى حرف السطر الجديد).

ومزيج من الحروف هي عادة ليست ضارة. إذا كنت تستخدم التحكم بالمصادر، قد تكون قادرة على تكوين تنسيق الإيداع ملف نصي بحيث يتم تعديلها خطوط سحرية بالنسبة لك. بدلا من ذلك، قد تكون قادرا على استخدام الإيداع والخروج المشغلات التي سيتم تلقائيا "إصلاح" الملفات بالنسبة لك. أو، ربما كنت مجرد استخدام أداة مثل dos2unix لضبط الأمور يدويا.

أنا استخدم بيئة تطوير أندرويد (جيت براينز فكرة إنتيليج) على نظام التشغيل ماك وكانت مشكلتي هي أن ^M بدأ في الظهور في بعض الملفات في طلب السحب الخاص بي جيثب.ما نجح بالنسبة لي هو تغيير فاصل الأسطر للملف.

افتح الملف المطلوب في المحرر اذهب إلىملف اذهب إلىفواصل الخط ثماختر الخيار الأفضل بالنسبة لك(بالنسبة لي كان LF - Unix وOS X( ) )

وبحسب المقال التالي فإن هذه المشكلة ناتجة عن نهايات الأسطر المشوشة بين أنظمة التشغيل:http://jonathonstaff.com/blog/issues-with-line-endings/

والمزيد من المعلومات تجدونها هنا:https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48

enter image description here

لقد وكما ذكر الجميع. انها نمط مختلف خط النهاية. يستخدم ماكوسكس يونكس خط النهايات - أي LF (سطر تغذية)

ويستخدم نظام التشغيل Windows كلا CR (إرجاع) و LF (سطر تغذية) كخط نهاية. منذ كنت تستخدم كل من ويندوز وماك ل thats حيث تنبع المشكلة من.

إذا قمت بإنشاء ملف في ويندوز ثم جعله على لجنة الهدنة العسكرية قد ترى هذه الشخصيات ^ M في نهاية السطور.

إذا كنت تريد إزالتها يمكنك القيام بذلك بسهولة جدا في ايماكس. مجرد تسليط الضوء على ونسخ الطابع ^ M والقيام استعلام استبدال ^ M مع وyou'e القيام به.

وتحرير: بعض الروابط الأخرى التي قد تكون عونا. http://xahlee.org/emacs/emacs_adv_tips.html

وهذا واحد يساعدك على تكوين ايماكس إلى استخدام نوع معين من نمط تنتهي الخط. http://www.emacswiki.org/emacs/EndOfLineTips

وجريت إلى هذه المسألة في حين يعود. و^ M يمثل النقل العودة، والبحث عن Ctrl-Q Ctrl-M (وهذا يخلق حرفي ^ M) تسمح لك الحصول على التعامل مع هذه الشخصية داخل ايماكس. فعلت شيئا على طول هذه الخطوط:

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

وانظر أيضا:

إخفاء ^ M في ايماكس

كن حذرا إذا اخترت لإزالة ^ M الشخصيات وإعادة لفريقك. قد يرون ملف دون النقل يعود بعد ذلك.

إذا لم يكن لديك فائدة 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 في خطوط ينتهي في file_from_PC.txt. يمكنك معرفة ما اذا كان لديك تلك أم لا باستخدام القط:

cat -v file_from_PC.txt

وكان الحل بالنسبة لي لاستخدام وظيفة elisp التالية وجدت في هذا rel="nofollow إيماكس ويكي المادة .

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

وتنفيذ وM-x dos2unix الدالة على المخزن المؤقت وحفظ الملف، كل ^M سوف تختفي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top