ما الإعداد الموجود في VIM الذي يعرض رفض Smartindent ل Adent # تعليقات في SHELL SCRIPTS؟
-
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 تحرير: يبدو أنني كنت مخطئا تماما، تحقق من:
استعادة المسافة البادئة بعد كتابة التجزئة
أو
نصائح أخرى
حسنا، بعد استكشاف بعض الخيارات، بما في ذلك استخدام ":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.