سؤال كيف يمكنني العثور على ترميز المخزن المؤقت الحالي في vim؟


قل إنني أقوم بتحرير بعض الملفات باستخدام vim (أو gvim). ليس لدي أي فكرة عن ترميز الملف وأريد أن أعرف ما إذا كان في UTF-8 أو ISO-8859-1 أو أيا كان؟ هل يمكنني بطريقة ما إخبار vim بإظهار لي ما هو الترميز المستخدم؟


81
2017-08-24 13:48


الأصل




الأجوبة:


يعرض الإعداد fileencoding الترميز المخزن المؤقت الحالي:

:set fileencoding
fileencoding=utf8

لا توجد بالفعل طريقة شائعة لتحديد تشفير ملف نص عادي ، لأن هذه المعلومات لا يتم حفظها في الملف نفسه - باستثناء ملفات UTF-8 حيث لديك ما يسمى BOM الذي يشير إلى الترميز. هذا هو السبب في أن ملفات xml و html لها علامات metertags.

يمكنك فرض تشفير معين باستخدام إعداد "الترميز". نرى :help encoding و :help fileencoding في Vim لكيفية معالجة المحرر لهذه الإعدادات. يمكنك أيضًا إضافة العديد من إعدادات fileencoding إلى vimrc حتى يكون لديك vim محاولة للاكتشاف استنادًا إلى تلك المدرجة.


92
2017-08-24 13:52



في احسن الاحوال. حتى لو كان غير بديهي إلى حد ما. شكرا لكم! - innaM
لسوء الحظ ، غير صحيح. لفيم لا تستطيع تجد تشفير الملف الذي تقرأه. لم يكتب في الملف. يمكن أن يخمن فقط استنادًا إلى الأحرف المتوفرة في الملف. على سبيل المثال ، يمكن أن يكون الملف الذي يحتوي على النص "abcdef" في عدة ترميزات ، حيث أن جميع هذه الرموز تدعم هذه الأحرف تقريبًا ، ولكن من المحتمل أن يكون الملف الذي يحمل "šđčćž" في CP1252. لذا ، فأنت لا تقرأ الترميز من مكان ما ، ولكن تخمين ما يمكن أن يكون عليه التشفير ، وبناءً على عرضه بشكل صحيح. - Rook
ما تفعله هنا صريح ضبط الترميز ، بناءً على ملاحظاتك لمحتويات الملف. إذا كنت ترغب في استخدام vim لتجربة العديد من الترميز ، عند فتح ملف ، ضع العديد منها في الخيار في _vimrc. - Rook
ldigas ، شكرًا على التعليقات ، لقد قمت بتحديث الإجابة لتكون أكثر وضوحًا قليلاً بشأن ذلك (آمل!) - jtimberman
ربما جدير بالذكر أن BOMs هي 1.) ليس فريدًا بالنسبة إلى UTF-8 - على الرغم من أن UTF-8 متميز عن BOMs الأخرى ، 2) غير مطلوب وغير موجود في الغالب في UTF-8. - ruffin


لاحظ أن ترميز الملفات هو لم يذكر صراحة في أي مكان في ملف. وبالتالي ، يجب تخمين VIM والتطبيقات الأخرى في الترميز. الطريقة الكنسي للقيام بذلك هي مع chardet التطبيق ، والتي يمكن تشغيلها من داخل VIM على النحو التالي:

:!chardet %

الإجابة التي قدمها jtimberman يظهر لك ترميز المخزن المؤقت الحالي قد لا يكون نفس الترميز مثل الملف الموجود على القرص. وبالتالي ، ستلاحظ ذلك chardet سيعرض في بعض الأحيان ترميزًا مختلفًا عن VIM ، خاصة إذا كان لديك VIM مهيئًا لاستخدام ترميز معين دائمًا (مثل UTF-8).

الشيء الجميل chardet هو أنه يعطي درجة ثقة لتخمينه ، في حين أن VIM يمكن (وغالبًا ما) يكون خاطئًا حول تخمين التشفير إذا لم تكن هناك أحرف كثيرة فوق \ x7F (ASCII 127). على سبيل المثال ، إضافة واحدة א إلى ملف طويل من كود PHP يجعل chardet أعتقد أن الملف هو ISO-8859-2 بثقة 0.72 ، بينما تضيف عبارة أطول قليلاً שלום, עולם!‏ يعطي UTF-8 بثقة 0،99. في كلتا الحالتين، set fileencoding? أظهر UTF-8 ليس لأن الملف على القرص كان UTF-8 ، ولكن بسبب تكوين VIM لاستخدام UTF-8 داخليًا.


12
2017-12-26 06:59



أقترح أن أذكر كلمة حول توافر chardet عبر OS'es. - Soundararajan
@ سونداراراجان: ربما لست الشخص الذي ذكر ذلك لأنني أستخدم ديبيان و CentOS فقط. أنت مدعو لتحرير الإجابة إذا كانت لديك معلومات ذات صلة ، على الرغم من ذلك. شكر! - dotancohen