سؤال

أنا أكتب ملف تكوين وأحتاج إلى تحديد ما إذا كانت العملية تتوقع ملف تنسيق Windows أو ملف تنسيق UNIX. لدي نسخة من الملف المتوقع - هل هناك طريقة يمكنني التحقق مما إذا كان يستخدم n أو r n دون الخروج من emacs؟

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

المحلول

إذا كان (DOS) على النموذج عند فتح الملف على UNIX ، فإن نهايات الخط تكون على طراز Windows. إذا كانت (UNIX) عند فتح الملف على Windows ، فإن نهايات الخط تكون على طراز Unix.

من دليل Emacs 22.2 (Node: Mode Line):

إذا كان ملف المخزن المؤقت يستخدم خط العائد ، فإن القولون يتغير إما إلى عرقلة خلفية ('') أو '(dos)' ، اعتمادًا على نظام التشغيل. إذا كان الملف يستخدم فقط عائد النقل ، فإن مؤشر القولون يتغير إما إلى مقطع مائل للأمام ('/') أو '(mac)'. في بعض الأنظمة ، يعرض Emacs (UNIX) "بدلاً من القولون للملفات التي تستخدم NewLine كفاصل خط.

إليك وظيفة - على ما أعتقد - تُظهر كيفية التحقق من Elisp ما حدده Emacs ليكون نوع نهايات الخط. إذا كان يبدو معقدًا بشكل غير عادي ، فربما يكون كذلك.

(defun describe-eol ()
  (interactive)
  (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
    (when (vectorp eol-type)
      (setq eol-type (coding-system-eol-type (aref eol-type 0))))
    (message "Line endings are of type: %s"
             (case eol-type
               (0 "Unix") (1 "DOS") (2 "Mac") (t "Unknown")))))

نصائح أخرى

إذا ذهبت في وضع Hexl (MX Hexl-Mode) ، فسترى بايت إنهاء الخط.

افتح الملف في emacs باستخدام find-filely. إذا كانت الخطوط تحتوي على رموز ^M في النهاية ، فإنها تتوقع ملفًا نصيًا لتنسيق Windows.

ستعود وظيفة ELISP التالية nil إذا كان لا "\r\n" تظهر المقصات في ملف (وإلا فإنه يعيد نقطة الحدوث الأول). يمكنك وضعه في الخاص بك .emacs واتصل بها مع M-x check-eol.

(defun check-eol (FILE)
  (interactive "fFile: ")
  (set-buffer (generate-new-buffer "*check-eol*"))
  (insert-file-contents-literally FILE)
  (let ((point (search-forward "\r\n")))
    (kill-buffer nil)
    point))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top