it-swarm.asia

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

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

88
innaM

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

:set fileencoding
fileencoding=utf8

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

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

102
jtimberman

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

:!chardet %

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

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

12
dotancohen