العربية

أدوات المطور · مقارنة النص

كل سطر تغير؟ نهايات الأسطر والمسافات الزائدة وقائمة مكونات الصنف في فرق

· كيف يعمل

فرق النص نهايات الأسطر تصحيح الأخطاء

مكدسات الخطوط المتوازية مع علامة نهاية إضافية وعلامة السطر الأول
الرسم التوضيحي المتجه الأصلي ToolAcre

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

نفس الملف، الذي تم حفظه مرتين، ويبدو أنه تمت إعادة كتابته - يحدد الحالة الشائعة لملف تم تحريره على نظامي تشغيل

يمكن أن تبدو عمليتا الحفظ وكأنها إعادة كتابة عندما يقوم المحرر بتغيير الأحرف غير المرئية، ولكن سلوك ToolAcre يعتمد على الأحرف التي تم تغييرها. فهو يعمل على تطبيع نهايات الأسطر قبل المطابقة، بينما تظل المسافات الموجودة على حافة السطر وU+FEFF في البداية محتوى سطر عادي ما لم يغير خيار آخر المفتاح.

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

CRLF مقابل LF: الحرف الموجود في نهاية كل سطر - يوضح سبب إنهاء Windows للأسطر بحرفين، وUnix بحرف واحد، وكيف يرى الفرق عودة السطر الإضافي

`splitLines` يستبدل CRLF وCR المنفرد بـ LF، ثم يقسم. تثبت الاختبارات أن الاتفاقيات الثلاثة تنتج نفس المصفوفات. ولذلك فإن الفرق CRLF فقط يكون غير مرئي حتى عندما يكون تجاهل المسافة البيضاء في وضع إيقاف التشغيل؛ إن ادعاء المخطط التفصيلي بأن كل سطر سيختلف يتناقض مع هذا التنفيذ.

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

يقوم ToolAcre بتسوية CRLF وCR وLF قبل المقارنة، بحيث تختفي التغييرات النهائية فقط

تبقى المسافات الزائدة في الأسطر الأصلية. بالمقارنة العادية، `name=value` و`name=value ` لهما مفاتيح مختلفة. يؤدي تجاهل المسافة البيضاء إلى قطع كلا الطرفين وطي عمليات التشغيل الداخلية، بحيث يمكن لهذا الخيار أن يجعل الزوج متطابقًا مع الحفاظ على النص الأصلي الأيسر في الصف المتساوي المعروض.

تطبق المكتبة أيضًا خيارًا أضيق `ignoreTrailingWhitespace`، لكن واجهة المستخدم الحالية لا تكشفه. يجب ألا تصف المقالات مربع اختيار لا يمكن للمستخدمين تحديده. توفر اللوحة المشحونة تجاهل حالة الأحرف وتجاهل جميع اختلافات المسافات البيضاء وطي عمليات التشغيل الطويلة دون تغيير.

علامة ترتيب البايت الموجودة أعلى الملف - تصف الحرف U+FEFF الذي يلحقه بعض المحررين بملفات UTF-8 ولماذا يجعل السطر الأول فقط مختلفًا

علامة ترتيب البايت UTF-8 التي تم فك تشفيرها في نص JavaScript هي U+FEFF في بداية السطر الأول. لا يحتوي `splitLines` على إزالة BOM صريحة. باستخدام المطابقة العادية، يمكن لهذا الحرف أن يجعل الصف الأول فقط مختلفًا بينما تظل الأسطر اللاحقة متساوية.

JavaScript قد تعامل عمليات المسافة البيضاء U+FEFF كمسافة بيضاء عند تجاهل استدعاءات المسافة البيضاء `trim`، ولكن هذه المقالة لا تعمم ذلك في سلوك فك تشفير الملف. يتلقى المحرر سلاسل؛ ولا يقرأ بايتات الملف أو تقرير الترميزات. افحص الشخصية الفعلية عندما يكون المصدر على مستوى البايت مهمًا.

مثال عملي: التمييز بين الأسباب الثلاثة - يعطي مسارًا للقرار: يشير فرق السطر الأول فقط إلى BOM، ويشير كل سطر إلى النهايات، وتشير الخطوط المتناثرة إلى مسافات زائدة

ابدأ بـ `alpha beta` و`alpha beta`: النتيجة متطابقة. قم بعد ذلك بمقارنة `alpha beta` مع `alpha beta`: يُبلغ الوضع العادي عن صفوف بديلة، بينما يطابقها وضع المسافة البيضاء. أخيرًا، أضف حرف ألفا من أحد الجانبين إلى U+FEFF ولاحظ تأثير السطر الأول.

يفصل هذا التسلسل الأسباب باستخدام العمليات المثبتة في المستودع. إذا ظل كل سطر مختلفًا بعد إنهاء التسوية، فتحقق من المحتوى أو المسافة البادئة أو الأحرف اللاحقة بدلاً من إلقاء اللوم على CRLF وحده. إذا كان هناك اختلاف في السطر الأول فقط، فافحص نقاط التعليمات البرمجية البادئة الخاصة به قبل إعادة كتابة الملف بأكمله.

استخدام خيار المسافة البيضاء كتشخيص - يُظهر كيف يمكن لتمكين تجاهل المسافة البيضاء في مقارنة النص في ToolAcre أن يمتص المسافة الزائدة وضوضاء نهاية السطر بحيث تبرز التعديلات الحقيقية

يعد تجاهل المسافة البيضاء مفيدًا لضوضاء المسافة الزائدة لأنه يقوم بقص مفاتيح الخطوط وتكثيفها. وهي ليست مسؤولة عن إخفاء CRLF مقابل LF؛ لقد حدث ذلك بالفعل أثناء الانقسام. إن إبقاء هذه المراحل منفصلة يمنع التوصل إلى نتيجة مضللة حول الخيار الذي أصلح المقارنة.

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

يقوم وضع المسافة البيضاء بتشخيص المسافات الزائدة، بينما تتم تسوية نهايات الأسطر بالفعل

لا يقوم Text diff بتحويل الملفات أو تكوين Git أو تغيير إعدادات المحرر أو الكشف عن وحدات البايت السداسية العشرية. يقبل السلاسل الملصقة وعمليات سطر التقارير. نصيحة حول `.gitattributes`، `core.autocrlf` أو إصلاح التشفير تنتمي إلى الأدوات التي يمكن التحقق من سلوكها بشكل منفصل.

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

الخلاصة: تحقق من الأشياء غير المرئية قبل إلقاء اللوم على المؤلف - يلخص مسار التشخيص ويلاحظ أن المقارنة تجري في متصفحك، بحيث تبقى الملفات الحساسة على جهازك

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

يؤدي تقسيم الخط على جانب المتصفح إلى اختفاء اختلافات النهاية عبر الأنظمة الأساسية حسب التصميم. وهذا أمر مناسب، ولكنه يعني أيضًا أن هذه الأداة لا يمكنها إثبات أن ملفين مصدرين يستخدمان نفس وحدات البايت الفعلية للسطر الجديد. اختر أداة مساعدة تراعي البايت عندما يكون الحفاظ على تمثيل دقيق للسلك أو المستودع هو المتطلب.