كيفية إنشاء مقتطفات قصيرة في فيم؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

لقد بدأت مؤخرًا في استخدام Vim كمحرر نصوص وأعمل حاليًا على تخصيصاتي الخاصة.

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

لذلك، على سبيل المثال، إذا كتبت def{TAB} (:imap def{TAB} def ():<ESC>3ha)، ويمتد إلى:

def |(): # '|' represents the caret

يعمل هذا كما هو متوقع، لكنني أجد الأمر مزعجًا عندما ينتظر Vim الأمر الكامل بينما أكتب كلمة تحتوي على "def" ولست مهتمًا بتوسيعها.

  • هل هناك طريقة لتجنب ذلك أو استخدام هذه الوظيفة بشكل أكثر فعالية لتحقيق هذه الغاية؟
  • هل هناك أي ميزة Vim أخرى أكثر ملاءمة لهذا؟

بعد إلقاء نظرة سريعة على مقتطفاتEmu, ، يبدو أنه الخيار الأفضل وأسهل في التخصيص مما كنت أعتقد في البداية.

لنستمر بالمثال السابق:

:Snippet def <{}>():

بمجرد التحديد، يمكنك توسيع مقتطفك عن طريق الكتابة def{TAB}.

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

المحلول

مقتطفاتEmu هو البرنامج المساعد مقتطفات مفيدة.

نصائح أخرى

Snapmate - مثل texmate :)http://www.vim.org/scripts/script.php?script_id=2540

فيديو:http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}

كاقتراح آخر (على الرغم من اختلافه قليلاً) باستخدام وظيفة vim المضمنة:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

الآن، عندما تكتب def متبوعة بمسافة أو حرف آخر غير كلمة، فسوف يتوسع إلى نفس ما قدمته كمخرجات SnippetsEmu (تأتي المسافة من المساحة التي أدخلتها لبدء الإكمال).

لا يعاني هذا الأسلوب من مشكلة "التأخر" التي واجهتها باستخدام :inoremap، وهو مدمج في vim.لمزيد من المعلومات حول هذه الميزة، انظر :help abbrev.

قد تكون قلقًا من أن يتم تشغيله بواسطة مسافة وليس علامة تبويب، فسيتم تشغيله دون داعٍ، ولكن بشكل عام، فإن vim ذكي جدًا بشأن وقت تشغيله.يمكن تخفيف المشكلة بشكل إضافي من خلال تمكين الاختصار فقط لأنواع معينة من الملفات (على سبيل المثال، python):

au filetype python :iabbrev ... etc

يعد Snip[ets] (Manager|Emu|Mate|.vim) بالطبع حلاً مثاليًا أيضًا، ولكن من الجيد أن تكون على دراية بالبدائل (خاصة عندما تكون مدمجة).

إذا كان SnippetsEmu ثقيلًا جدًا أو طموحًا جدًا بالنسبة لما تحتاجه (كان ذلك بالنسبة لي)، فقد كتبت مكونًا إضافيًا يدير المقتطفات بناءً على نوع الملف.حتى أنه يحتوي على علامة تبويب كاملة عند اختيار المقتطف!:)

أحضره هنا: snippets.vim

لقد قمت للتو بتثبيت UltiSnips.هناك مقالة جيدة تشرح سبب اختيارك لـ UltiSnips: لماذا ألتي سنيبس؟

لم أستخدم أيًا من المكونات الإضافية الأخرى؛قررت أن أغامر بواحدة تبدو كاملة المواصفات وستكون قادرة على استيعابي عندما أكتسب المزيد من مهارات Vim وأريد القيام بأشياء أكثر تعقيدًا.

كما لاحظت MDCore، مقتطفاتEmu هو برنامج Vim مشهور يقوم بذلك وأكثر.إذا كنت بحاجة إلى التوسيع فقط (دون تحريك علامة الإقحام للخلف)، فيمكنك استخدام المعيار :ab[breviate] يأمر.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top