سؤال

يجب أن يكون الأمر تافهًا، وربما يكون في المساعدة، لكن لا يمكنني معرفة كيفية التنقل فيه.كيف أقوم بوضع مسافة بادئة لعدة أسطر بسرعة في السادس؟

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

المحلول

واستخدم > الأمر. البادئة 5 خطوط، 5 > > . بمناسبة كتلة من خطوط والمسافة البادئة ذلك، V ي ي > البادئة 3 خطوط (همة فقط) . إلى مسافة بادئة مجعد الأقواس منع، وضعت المؤشر على أحد الأقواس المعقوفة واستخدام > ٪ أو من أي مكان داخل استخدام كتلة > < KBD> أنا B .

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

وبالإضافة إلى ذلك، يسمح لل shiftwidth تعيين لك التحكم في كيفية العديد من المساحات البادئة.

نصائح أخرى

تلخص هذه الإجابة الإجابات والتعليقات الأخرى لهذا السؤال، وتضيف معلومات إضافية بناءً على وثائق فيم و ال فيم ويكي.للإيجاز، لا تميز هذه الإجابة بين الأوامر الخاصة بـ Vi وVim.

في الأوامر أدناه، تعني عبارة "إعادة المسافة البادئة" "وضع مسافة بادئة للسطور وفقًا لملفك إعدادات المسافة البادئة." shiftwidth هو المتغير الأساسي الذي يتحكم في المسافة البادئة.

الأوامر العامة

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces
5>>  Indent 5 lines
5==  Re-indent 5 lines

>%   Increase indent of a braced or bracketed block (place cursor on brace first)
=%   Reindent a braced or bracketed block (cursor on brace)
<%   Decrease indent of a braced or bracketed block (cursor on brace)
]p   Paste text, aligning indentation with surroundings

=i{  Re-indent the 'inner block', i.e. the contents of the block
=a{  Re-indent 'a block', i.e. block and containing braces
=2a{ Re-indent '2 blocks', i.e. this block and containing block

>i{  Increase inner block indent
<i{  Decrease inner block indent

يمكنك استبدال { مع } أو B, ، على سبيل المثال. =iB هو أمر مسافة بادئة صالحة للكتلة.نلقي نظرة على "مسافة بادئة لكتلة التعليمات البرمجية" للحصول على مثال جميل لتجربة هذه الأوامر.

أيضا، تذكر ذلك

.    Repeat last command

, ، لذلك يمكن تكرار أوامر المسافة البادئة بسهولة ويسر.

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

هناك موقف شائع آخر يتطلب إصلاح المسافة البادئة في الملف المصدر:

gg=G  Re-indent entire buffer

يمكنك توسيع هذه الفكرة لتشمل ملفات متعددة:

" Re-indent all your c source code:
:args *.c
:argdo normal gg=G
:wall

أو مخازن مؤقتة متعددة:

" Re-indent all open buffers:
:bufdo normal gg=G:wall

في الوضع المرئي

Vjj> Visually mark and then indent 3 lines

في وضع الإدراج

تنطبق هذه الأوامر على السطر الحالي:

CTRL-t   insert indent at start of line
CTRL-d   remove indent at start of line
0 CTRL-d remove all indentation from line

الأوامر السابقة

هذه مفيدة عندما ترغب في الحصول على مجموعة محددة من الخطوط ، دون تحريك المؤشر.

:< and :> Given a range, apply indentation e.g.
:4,8>   indent lines 4 to 8, inclusive

المسافة البادئة باستخدام علامات

نهج آخر هو عبر علامات:

ma     Mark top of block to indent as marker 'a'

...حرك المؤشر إلى نهاية الموقع

>'a    Indent from marker 'a' to current location

المتغيرات التي تحكم المسافة البادئة

يمكنك تعيين هذه في الخاص بك ملف .vimrc.

set expandtab       "Use softtabstop spaces instead of tab characters for indentation
set shiftwidth=4    "Indent by 4 spaces when using >>, <<, == etc.
set softtabstop=4   "Indent by 4 spaces when pressing <TAB>

set autoindent      "Keep indentation from previous line
set smartindent     "Automatically inserts indentation in some cases
set cindent         "Like smartindent, but stricter and more customisable

يحتوي Vim على مسافة بادئة ذكية بناءً على نوع الملف.حاول إضافة هذا إلى .vimrc الخاص بك:

if has ("autocmd")
    " File type detection. Indent based on filetype. Recommended.
    filetype plugin indent on
endif

مراجع

وهناك مجموعة كبيرة ستكون كما يلي:

gg=G

فهو سريع حقا، وكل شيء يحصل بادئة؛ -)

جرب هذا أيضًا لـ المسافة البادئة C المسافة البادئة، افعل :help = لمزيد من المعلومات:

={

سيؤدي ذلك إلى وضع مسافة بادئة تلقائية في كتلة التعليمات البرمجية الحالية التي تتواجد فيها.

أو فقط:

==

لوضع مسافة بادئة تلقائية للسطر الحالي.

الضغط على المفاتيح لمزيد من الأشخاص المرئيين:

  1. أدخل وضع الأوامر:
    يهرب

  2. انتقل إلى بداية المنطقة لوضع مسافة بادئة:
    حيكل

  3. ابدأ الكتلة:
    الخامس

  4. انتقل إلى نهاية المنطقة لوضع مسافة بادئة:
    حيكل

  5. (اختياري) اكتب عدد مستويات المسافة البادئة التي تريدها
    0..9

  6. تنفيذ المسافة البادئة على الكتلة:
    >

وبالإضافة إلى الجواب بالفعل ومقبولة، فمن الممكن أيضا أن تضع علامة وكل شيء ثم البادئة من المؤشر الحالي إلى علامة. وهكذا، أدخل ma حيث تريد رأس كتلة بادئة الخاص بك، المؤشر أسفل بقدر ما تحتاج إليه ثم اكتب >'a (لاحظ أن "a" يمكن أن تكون بديلا عن أي اسم علامة صالح). هذا في بعض الأحيان أسهل من 5>> أو vjjj>.

وسيد جميع الأوامر غير
gg=G

وهذه مسافة بادئة الملف بأكمله!

وفيما يلي بعض من الأوامر بسيطة وأنيقة تستخدم لخطوط المسافة البادئة بسرعة في فيم أو gVim.

لالبادئة السطر الحالي
==

لوضع مسافة بادئة للجميع خطوط تحت خط الحالي

و=G

لخطوط n المسافة البادئة تحت خط الحالي

وn==

وعلى سبيل المثال، بمحاذاة أطراف 4 خطوط تحت خط الحالي

و4==

لالبادئة كتلة من التعليمات البرمجية، انتقل إلى واحد من الأقواس واستخدام القيادة

و=%

وهذه هي أبسط، ولكن الأوامر قوية لالبادئة عدة أسطر.

انتقل إلى بداية النص

  • يضعط الخامس للوضع البصري.
  • يستخدم أعلى/تحت سهم لتسليط الضوء على النص.
  • يضعط = لوضع مسافة بادئة لجميع الأسطر التي أبرزتها.

وكذلك الحلول التي تقدمها، وأنا أحب أن تفعل أشياء فقرة في وقت واحد مع >}

عند تحديد كتلة واستخدام > بمحاذاة أطراف، وتزكي ثم يعود إلى الوضع الطبيعي. لدي هذا في ملف .vimrc بلدي:

vnoremap < <gv

vnoremap > >gv

وهذا يتيح لك بمحاذاة أطراف اختيارك وكثير من الوقت كما تريد.

لنفترض أنك تستخدم مسافتين لوضع مسافة بادئة للتعليمات البرمجية الخاصة بك.يكتب:

:set shiftwidth=2
  • يكتب الخامس (للدخول إلى وضع تحرير الكتلة المرئية)
  • حرك المؤشر باستخدام مفاتيح الأسهم (أو باستخدام ح/ي/ك/ل) لتمييز الأسطر التي تريد المسافة البادئة لها أو إلغاء المسافة البادئة لها.

ثم:

  • يكتب > لوضع مسافة بادئة مرة واحدة (مسافات 2).
  • يكتب 2> لوضع مسافة بادئة مرتين (4 مسافات).
  • يكتب 3> لوضع مسافة بادئة ثلاث مرات (6 مسافات).
  • ...
  • يكتب < لإزالة المسافة البادئة مرة واحدة (مسافات 2).
  • يكتب 2< لإلغاء المسافة البادئة مرتين (4 مسافات).
  • يكتب 3< لإلغاء المسافة البادئة ثلاث مرات (6 مسافات).
  • ...

انت وجدت الفكرة.

(لن يتم وضع مسافة بادئة للأسطر الفارغة، وهو ما أعتقد أنه لطيف نوعًا ما.)


لقد وجدت الإجابة في وثائق (g)vim لوضع مسافة بادئة للكتل:

:help visual-block
/indent

إذا كنت ترغب في إعطاء عدد للأمر ، فقم بذلك قبل كتابة حرف المشغل:"V {Move-Around} 3>" (نقل الخطوط 3 المسافات البادئة إلى اليمين).

يكمن جمال واجهة المستخدم الخاصة بـ vim في أنها متسقة.تتكون أوامر التحرير من الأمر وحركة المؤشر.حركات المؤشر هي نفسها دائمًا:

  • ح إلى أعلى الشاشة، ل للاسفل، م إلى المنتصف
  • نز للانتقال إلى السطر n، ز وحده إلى أسفل الملف، زز الى الاعلى
  • ن للانتقال إلى مطابقة البحث التالية، ن إلى السابق
  • } إلى نهاية الفقرة
  • % إلى القوس المطابق التالي، إما من الأقواس أو نوع العلامة
  • يدخل إلى السطر التالي
  • 'س لوضع علامة x حيث x هو حرف أو آخر '
  • وغيرها الكثير، بما في ذلك ث و دبليو للكلمة، $ أو 0 إلى أطراف السطر، وما إلى ذلك، التي لا تنطبق هنا لأنها ليست كذلك خط الحركات.

لذلك، من أجل استخدام vim، عليك أن تتعلم كيفية تحريك المؤشر وتذكر مجموعة من الأوامر مثل، على سبيل المثال، > لوضع مسافة بادئة (و < إلى "الخارج").
وبالتالي، يمكنك القيام بذلك من أجل وضع مسافة بادئة للخطوط من موضع المؤشر إلى أعلى الشاشة >ح, >ز لوضع مسافة بادئة في أسفل الملف.

إذا، بدلا من الكتابة >ح, ، أنت تكتب دح ثم تقوم بحذف نفس كتلة الأسطر، جح لاستبداله، الخ.

تتناسب بعض حركات المؤشر بشكل أفضل مع أوامر محددة.على وجه الخصوص، % يعد الأمر مفيدًا لوضع مسافة بادئة لكتلة HTML أو XML بأكملها.
إذا كان الملف يحتوي على بناء جملة مميز (:syn on) ثم قم بتعيين المؤشر في نص العلامة (مثل، في "i" من <div> والدخول >% سيتم وضع مسافة بادئة حتى علامة الإغلاق </div>.

هذه هي الطريقة التي يعمل بها فيم:على المرء أن يتذكر فقط حركات المؤشر والأوامر وكيفية مزجها.
لذا فإن إجابتي على هذا السؤال ستكون "انتقل إلى أحد طرفي كتلة الأسطر التي تريد وضع مسافة بادئة لها، ثم اكتب > الأمر والحركة إلى الطرف الآخر من الكتلة" إذا مسافة بادئة يتم تفسيره على أنه تغيير الخطوط، = لو مسافة بادئة يتم تفسيره كما هو الحال في الطباعة الجميلة.

وقيام بذلك

$vi .vimrc

وإضافة هذا الخط

autocmd FileType cpp setlocal expandtab shiftwidth=4 softtabstop=4 cindent

وهذا هو فقط للملف حزب الشعب الكمبودي يمكنك القيام بذلك عن نوع ملف آخر أيضا فقط عن طريق تعديل نوع الملف ...

طريقة سريعة للقيام بذلك باستخدام VISUAL MODE يستخدم نفس عملية التعليق على كتلة من التعليمات البرمجية.

يعد هذا مفيدًا إذا كنت تفضل عدم تغيير حسابك shiftwidth أو استخدام أي set التوجيهات ومرنة بما يكفي للعمل مع علامات التبويب أو المسافات أو أي شخصية أخرى.

  1. ضع المؤشر في البداية على الكتلة
  2. v للتبديل إلى -- VISUAL MODE --
  3. حدد النص المراد وضع مسافة بادئة له
  4. يكتب : للتبديل إلى المطالبة
  5. الاستبدال بثلاث مسافات بادئة:

    :'<,'>s/^/ /g

  6. أو الاستبدال بعلامات التبويب الرائدة:

    :'<,'>s/^/\t/g

  7. شرح موجز:

    '<,'> - ضمن النطاق المحدد بصريا

    s/^/ /g - أدخل 3 مسافات في بداية كل سطر ضمن النطاق بأكمله

    (أو)

    s/^/\t/g - إدراج Tab في بداية كل سطر ضمن النطاق بأكمله

أرغب في وضع علامة على النص للمسافة البادئة:

  1. انتقل إلى بداية سطر النص ثم اكتب ma (a هي التسمية من 'm'ark:يمكن أن يكون أي حرف)
  2. انتقل إلى السطر الأخير من النص واكتب mz (مرة أخرى، يمكن أن يكون z أي حرف)
  3. :'a,'z> أو :'a,'z< سيتم وضع مسافة بادئة أو مسافة بادئة (هل هذه كلمة؟)
  4. هاهو!يتم نقل النص (تبقى الأسطر الفارغة فارغة بدون مسافات)

ملاحظة:يمكنك استخدام تقنية :'a,'z لوضع علامة على نطاق لأي عملية (d،y،s///، إلخ) حيث يمكنك استخدام الخطوط أو الأرقام أو %

و>} أو >{ المسافة البادئة من السطر الحالي تصل إلى الفقرة التالية

و<} أو <{ نفس إزالة الجدولة

وهناك طريقة أخرى لم يتم ذكرها بعد - يمكنك استخدام القيادة norm i لإدراج نص معين في بداية السطر. لإدراج 10 المساحات قبل خطوط 2-10:

:2,10norm 10i 

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

:%norm 5i_

وأو شيء أكثر يتوهم:

:%norm 2i[ ]

والمثال العملي أكثر تعليقا باش / بيثون / الخ الرمز مع # الحرف:

:1,20norm i#

واستخدام لإعادة البادئة س بدلا من أنا . على سبيل المثال لإزالة الأحرف 5 الأولى من كل سطر:

:%norm 5x
كان

وبالنسبة لي، وMacVim (بصري) الحل، حدد مع الماوس ثم اضغط على ">"، ولكن بعد وضع الأسطر التالية في "~ / .vimrc" منذ أن كنت ترغب فضاءات بدلا من علامات التبويب:

set expandtab
set tabstop=2
set shiftwidth=2

وكما أنه من المفيد أن تكون قادرة على استدعاء MacVim من سطر الأوامر (Terminal.app)، وذلك لأن لدي الدليل المساعد التالية "~ / بن"، حيث أضع سيناريو "macvim":

#!/usr/bin/env bash
/usr/bin/open -a /Applications/MacPorts/MacVim.app $@

وبالطبع في "~ / .bashrc":

export PATH=$PATH:$HOME/bin

وMacports عبث مع "~ / .profile" الكثير، وبالتالي فإن متغير بيئة PATH يمكن الحصول على فترة طويلة جدا.

لم أجد طريقة أستخدمها في التعليقات، لذا سأشاركها (أعتقد أن vim فقط):

  1. خروج للدخول إلى وضع الأوامر
  2. انتقل إلى الحرف الأول من السطر الأخير الذي تريد تعريفه
  3. كنترول-الخامس لبدء كتلة تحديد
  4. انتقل إلى الحرف الأول من السطر الأول الذي تريد تعريفه
  5. يحول-أنا للدخول إلى وضع الإدراج الخاص
  6. اكتب أكبر عدد ممكن من المسافات/علامات التبويب التي تحتاج إلى وضع مسافة بادئة لها (2 على سبيل المثال
  7. يضعط خروج وستظهر مسافات في جميع الأسطر

يكون هذا مفيدًا عندما لا ترغب في تغيير إعدادات المعرف/علامة التبويب في vimrc أو تذكرها لتغييرها أثناء التحرير.

لإلغاء المسافة البادئة أستخدم نفس الشيء كنترول-الخامس كتلة حدد لتحديد المسافات وحذفها مع د.

وأنا لا أعرف لماذا لها من الصعب جدا العثور على إجابة بسيطة مثل هذا واحد ...

وكان لي نفسي أن النضال الكثير لمعرفة هذه لها في غاية البساطة

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

set cindent

وفيكم ملف حيث تريد البادئة بشكل صحيح

وفي العادي / اكتب الأمر وضع

10==   (this will indent 10 lines from the current cursor location )
gg=G   (complete file will be properly indented)

و5== سوف البادئة 5 خطوط من الموقع الحالي للمؤشر. بحيث يمكنك كتابة أي عدد قبل ==، وسوف البادئة عدد من الخطوط. هذا هو في وضع الأوامر.

وgg=G سوف البادئة الملف بأكمله من الأعلى إلى الأسفل.

و:help left

في ex mode يمكنك استخدام :left أو :le لمحاذاة خطوط مبلغ محدد. على وجه التحديد، :left سوف <م> اليسار خطوط محاذاة في [مجموعة]. ويحدد المسافة البادئة في خطوط [بادئة] (الافتراضي 0).

و:%le3 أو :%le 3 أو :%left3 أو :%left 3 سوف محاذاة ملف كامل عن طريق الحشو مع ثلاث مسافات.

وسوف :5,7 le 3 محاذاة خطوط من 5 إلى 7 من الحشو لهم 3 مسافات.

و:le دون أي قيمة أو :le 0 سوف اليسار محاذاة مع الحشو 0.

وهذا يعمل في vim وgvim.

:line_num_start,line_num_end>

ومنها مثلا.

14,21> shifts line number 14 to 21 to one tab

وزيادة رمز '>' لمزيد من علامات التبويب

ومنها مثلا.

14,21>>> for 3 tabs

وعن طريق بيثون الكثير، وأجد نفسي بحاجة في كثير من الأحيان تحتاج إلى تحويل كتل من المسافة البادئة أكثر من واحد. يمكنك القيام بذلك عن طريق استخدام أي من طرق اختيار كتلة، وبعد ذلك فقط أدخل عدد تزكي كنت ترغب في القفز الحق قبل >

وعلى سبيل المثال. V5j3> سوف البادئة 5 خطوط 3 مرات - وهو 12 مسافات إذا كنت تستخدم 4 مساحات لتزكي

لالبادئة كل سطر في نوع الملف، ESC ثم G = زز

كيفية وضع مسافة بادئة للكود المميز في vi فورًا بعدد من المسافات:

الخيار 1:قم بوضع مسافة بادئة لكتلة من التعليمات البرمجية في vi إلى ثلاث مسافات باستخدام وضع Visual Block:

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

  2. سيظهر ما يلي في سطر الأوامر: :'<,'>

  3. لتعيين المسافة البادئة إلى 3 مسافات، اكتب le 3 واضغط على إدخال.وهذا ما يظهر: :'<,'>le 3

  4. يتم وضع مسافة بادئة للنص المحدد على الفور إلى 3 مسافات.

الخيار 2:قم بوضع مسافة بادئة لكتلة من التعليمات البرمجية في vi إلى ثلاث مسافات باستخدام وضع Visual Line:

  1. افتح ملفك في VI.
  2. ضع المؤشر فوق بعض التعليمات البرمجية
  3. كن في الوضع العادي اضغط على المفاتيح التالية:

    Vjjjj:le 3
    

    تفسير ما فعلته:

    V يعني البدء في تحديد النص.

    jjjj أسهم لأسفل 4 أسطر، مع تسليط الضوء على 4 أسطر.

    : يخبرك أنك ستدخل تعليمات للنص المميز.

    le 3 يعني مسافة بادئة للنص المميز بثلاثة أسطر.

    يتم زيادة أو تقليل الكود المحدد على الفور إلى ثلاث مسافات بادئة.

الخيار 3:استخدم وضع Visual Block ووضع الإدراج الخاص لزيادة المسافة البادئة:

  1. افتح ملفك في VI.
  2. ضع المؤشر فوق بعض التعليمات البرمجية
  3. كن في الوضع العادي اضغط على المفاتيح التالية:

    السيطرة+V

    jjjj
    

    (اضغط على مفتاح المسافة 5 مرات)

    خروج التحول + أنا

    يتم وضع مسافة بادئة لكل النص المميز بخمس مسافات إضافية.

لالبادئة كل ملف من 4:

esc 4G=G

أستخدم التحديد المرئي في وضع الكتلة:

  • انتقل إلى مقدمة الكتلة للتحرك (في الأعلى أو الأسفل).
  • اضغط على ctrl-v للدخول إلى وضع الكتلة المرئية.
  • انتقل لتحديد عمود أمام السطور.
  • اضغط على I (shift i) للدخول في وضع الإدراج.
  • اكتب بعض المسافات.
  • اضغط على زر الخروج ESC.جميع الخطوط سوف تتحول.

هذه ليست مهمة أحادية.إنها تعمل:

  • في منتصف السطور.
  • لإدراج أي سلسلة على كافة الأسطر.
  • لتغيير عمود (استخدم c بدلاً من I).
  • سحب، حذف، استبدال، الخ...
  • بالنسبة لكتلة الكود {}: = + %

  • للخط المحدد: يحول + الخامس حدد باستخدام مفتاح السهم لأعلى/لأسفل ثم اضغط =.

  • للملف بأكمله: زز + = + ز

ملحوظة: "gg" يعني الانتقال إلى السطر 1، و"=" هو أمر المسافة البادئة، و"G" يحرك المؤشر إلى نهاية الملف.

و| افترض يمثل موقف المؤشر في فيم. إذا كان النص المراد تحريكها والمغلقة في كتلة التعليمات البرمجية مثل:

int main() {
line1
line2|
line3
}

ويمكنك القيام به >i{ التي تعني " المسافة البادئة (>) داخل (i) كتلة ({) " والحصول على:

int main() {
    line1
    line2|
    line3
}

والآن لنفترض أن خطوط متجاورة ولكن خارج كتلة، مثل:

do
line2|
line3
line4
done

لخطوط المسافة البادئة 2-4 يمكنك بصريا تحديد خطوط ونوع >. أو حتى أسرع يمكنك القيام >2j للحصول على:

do
    line2|
    line3
    line4
done

لاحظ أن >Nj يعني المسافة البادئة من السطر الحالي لN خطوط أدناه. وإذا كان عدد الخطوط لتكون بادئة كبير، قد يستغرق بعض الثواني للمستخدم لحساب القيمة الصحيحة من N. لحفظ قيمة ثانية يمكنك تفعيل خيار <م> العدد النسبي مع set relativenumber (متوفر منذ فيم النسخة 7.3).

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