في vim، كيف يمكن تطبيق الأوامر التلقائية لنوع الملف على منطقة من الملف؟

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

  •  02-01-2020
  •  | 
  •  

سؤال

لدي نوع من الملفات متعددة اللغات التي يمكن أن تحتوي على C و python و Ruby وما إلى ذلك (فكر في "صفحة wiki" إذا كان ذلك مفيدًا).هل هناك طريقة لتنفيذ الأوامر التلقائية لنوع ملف معروف في منطقة من الملف؟

على سبيل المثال، قد يكون لدي:

#!bash
if [ a = b ]; then
   echo 'equal'
fi

#!python
if a = b:
    print('equal')

وأريد تطبيق الأوامر التلقائية لنوع ملف bash على الجزء الأول والأوامر التلقائية لنوع ملف python على الجزء الأخير.

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

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

المحلول

يعد القيام بذلك تلقائيًا أمرًا صعبًا، نظرًا لأن إعدادات نوع الملف تكون مخزنة محليًا؛فيم ليس لديه فكرة عن المناطق، لذلك :autocmds يجب استخدامها، كما ذكرت بشكل صحيح.

سريعة وسهلة

مع البرنامج المساعد مثل NrrwRgn - مكون إضافي لمنطقة ضيقة يشبه Emacs, ، يمكنك استنساخ المناطق لفصل المخازن المؤقتة للخدش؛يقوم البرنامج الإضافي بمزامنتها تلقائيًا مرة أخرى عند الكتابة.يمكن إعطاء كل مخزن مؤقت نوع ملف منفصل عبر :setf.

هناك طريقة أبسط تتمثل في تحديد بعض التعيينات لتبديل أنواع الملفات بسرعة:

:nnoremap <Leader>fp :setf python<CR>
:nnoremap <Leader>fs :setf sh<CR>

مناطق منفصلة حقا في منطقة عازلة واحدة

رسم هذا سهل:

:autocmd CursorMoved,CursorMovedI <buffer> if line('.') >= 6 | setf python | else | setf sh | endif

يعتمد هذا على قيام كل مكون إضافي لنوع الملف بالتنظيف المناسب (أو تجاوز جميع الخيارات ذات الصلة).

كيفية تحديد المناطق

أنت بالتأكيد لا تريد تحديد أرقام الأسطر بشكل صريح كما في الرسم أعلاه.لي البرنامج المساعد OnSyntaxChange قد يساعد، في حال كان لديك/يمكنك تحديد مناطق بناء الجملة المناسبة لكل كتلة.

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