ما الإعداد الموجود في VIM الذي يعرض رفض Smartindent ل Adent # تعليقات في SHELL SCRIPTS؟

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

  •  23-08-2019
  •  | 
  •  

سؤال

بدأت مؤخرا باستخدام VIM 7 (سابقا VIM 6) و smartindent ضبط. بالنسبة للجزء الأكبر، يعمل بشكل جيد، على الرغم من أنني اعتدت جدا كتابة علامة تبويب بعد هدفين مفتوحين أنه من الإنتاجية تقريبا.

ومع ذلك، هناك قطعة واحدة من السلوك المهون. عند تحرير برنامج نصي Shell، أحاول إنشاء تعليق على مستوى المسافة البادئة الحالية، ولكن smartindent لن يكون لديك ما تفعله به. إنه يصر على أن التعليق يجب أن يكون في المستوى 0 (بدون مسافة بادئة). ما هو أسوأ، فهو ينفصل عن اليمين (">>"والأصدقاء) حتى لا يعملون. هذا هو التمرين الصريح، وأود أن أعرف ما هو أفضل طريقة لإصلاحها؟

(أنا أيضا لا تحرص على smartindentأفكار حول المسافة البادئة then بعد if.)

الحلول المفضلة سيوفرني يدوي Bashing - أنا كسول. خيار واحد سيكون "إيقاف smartindent عند تحرير البرامج النصية SHEL (اتركها للراحة). سيكون خيارا آخر إرشادات حول كيفية العثور على البرنامج النصي للتحكم smartindent وماذا تحرير لتغيير الخصائص التي لا أحبها. الخيار النهائي (الذي لا أحتاج إلى المشورة بشأن كيفية القيام به - مجرد تلميح أن الأفضل، أو فقط، طريقة لاستعادة العقل) هو المغادرة smartindent إهمال

رأيت سؤالا متعلقة غامضة على "(PHP و) قواعد مضمنة VIM غير المطابقة"؛ لا يوفر لي الإجابة المباشرة، على الرغم من أن ربما cindent والمواد ذات الصلة المذكورة في الواقع جزء من الجواب.

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

المحلول

ابحث عن ملف المسافة البادئة، (مثل /usr/share/vim/vim71/indent/sh.vim على نظامي)

يشبه هذا الخط المشكلة:

SetLocal Indentkeys - =: 0 #

ربما يمكنك إصلاح هذا في .vimrc أو تحميل ملف المسافة البادئة مخصصة يدويا.

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

2nd تحرير: يبدو أنني كنت مخطئا تماما، تحقق من:

استعادة المسافة البادئة بعد كتابة التجزئة

أو

HOWTO- تكوين-vim-to-put- تعليقات-في بداية الأسطر-

نصائح أخرى

حسنا، بعد استكشاف بعض الخيارات، بما في ذلك استخدام ":set cindent' بدلا من ':set smartindent"لقد انتهى بي الأمر العودة إلى مجرد استخدام":set autoindent". من المحتمل أن تكون هناك طرق لجعل هذه الأشياء تعمل تماما كما أريدها، لكنها فوضوي بما فيه الكفاية و Fiddly بما فيه الكفاية لا يمكن أن أزعجني. لقد عملت بشكل جيد مع autoindent بالنسبة للسنوات العشرين الماضية العشرين، والفوائد المقدمة من أجراس أو صفارات إضافية مقدمة من smartindent تفوقها ما اعتبره سوء سلوكه.

شكرا لك يا خوان، لمساعدتكم. صدق ذلك أم لا، فهو يساعد - كثيرا جدا.

كما اكتشفت أيضا بعض الأوامر الأنيقة الأخرى، رغم ذلك، أثناء متابعة هذا:

>i}
>a}

هذه التحول الأيمن كتلة الكود التي تقوم بها.i"إصدار بطندات الجسم وليس الأقواس الختامية (أسلوبي المفضل)، و"aإصدار المسافات البادئة إغلاق الأقواس إلى (الإصدار المطلوب في العمل).

أيضا، يمكنك تطبيق تصفيات إلى "%في الأوامر المنفذة في قذيفة:

:make %:r.o

سيعمل هذا على جعل "جذر" اسم الملف الحالي (هذا "%:r') تليها '.o". أو، وبعبارة أخرى، إذا كنت التحرير somefile.c, هذا ينفذ make somefile.o.

أضف الخط أدناه في .vimrc

المسافة البادئة filet

(سيقوم بتعيين وضع المسافة البادئة المناسبة اعتمادا على FileType)

كان لدي هذه المشكلة نفسها لفترة طويلة، حتى أدركت أن Autoindent و SmartindEntent كلاهما غير ضروري إذا تم تعيين "FileType المسافة البادئة على" في VIMRC - "Filetype Edent On" يستخدم ملف المسافة البادئة / SH.VIM (أو أي لغة) في دليل VIM الخاص بك لمعرفة قواعد المسافة البادئة، يمكن أن تتداخل كلاهما Autoindent و Smartindent معه.

لم أختبر هذا مع sh، لكن بيرل بدأت فجأة يتصرف بشكل صحيح عندما تحولت.

Sidenote: إعادة توجيه خوان "إعادة توجيه" ينبغي تكون بادئة، لذا فإن إعادة المسافة البادئة (مرئية =، أو طبيعية ==) سوف تؤدي إلى اليسار.

لدي الأسطر التالية في بلدي .vimrc وأنا لا أشاهد المشكلة.

set smartindent
inoremap # X^H#

اعتدت ان أمتلك اضبط autoindent. بعد هذين السطرين ولكن يبدو أنه ليس له تأثير.

نعم هذا هو جدا مزعج. Smartindent هو حقا فقط ل C مثل اللغات. انظر كيف يمكنني تمكين المسافة البادئة المناسبة على أساس اللغة في:http://www.pixelbeat.org/settings/.vimrc.

الإجابة السابقة تشير إلى:

: inoremap # x ^ h #

هو ممتاز. الجواب الذي اقترحه وثائق VIM في ": مساعدة Smartindent". لاحظ أنه يتم إدخال ^ H باستخدام Ctrl-V Ctrl-H. القسم ذي الصلة من الوثائق أدناه.

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top