اذهب إلى المحتوى

تعرف على أساسيات Vim - الجزء الثاني


عبدالهادي الديوري

لقد تعرّفنا معا في الدرس السابق على أساسيّات التّعامل مع النّصوص والملفّات في محرر vim حيثُ شرحتُ أوامر متعلّقة بالتّعديل والحذف كالقصّ واللّصق والحذف، وتعرّفنا على مبادئ الانتقال بين الكلمات، الأسطر، التّبويبات وتقسيمات الشّاشة؛ والآن حان وقت المزيد من الأوامر -المتقدمة نسبيّا- التي ستساعدك على التعرف على المحرر بشكل أعمق.

معلومات الملف

إذا قمت بفتح ملف ما وتريد معلومات عنه فكل ما عليك فعله هو الضغط على Ctrl+g أو تنفيذ الأمر:

:f

بعد تنفيذ الأمر ستلاحظ في أسفل الملف ستلاحظ المعلومات التالية:

  • اسم الملف
  • عدد أسطر الملف
  • إحداثيات ومكان المؤشّر في الملف

1.png

التّعامل مع الفقرات

1. الأزرار a, o, s | A, O, S للانتقال إلى نمط الكتابة

الزر a سيقوم بالانتقال إلى وضع الكتابة بعد موضع المؤشّر مباشرة. للانتقال إلى وضع الكتابة بعد جملة كاملة أو فقرة معيّنة (بـأكملها):

A

الزر o (كما ذكرنا سابقا) ينتقل بك إلى نمط الكتابة في سطر جديد (تحت المؤشّر)، أما إذا كنت ترغب بالدّخول إلى نمط الكتابة في سطر جديد فوق المؤشّر فاستعمل:

O

الزّرّ s سيقوم بحذف الحرف الذي يوجد فيه المؤشر وينتقل بك مباشر ة إلى وضع الكتابة، أي أن الزر s له دور التعديل.

إذا أردت تعديل جملة كاملة أو فقرة معيّنة (بـأكملها):

S

2. الزرّان r و R للانتقال إلى وضع الاستبدال

يوجد وضع (نمط) آخر في vim ألا وهو وضع الاستبدال (Replace) يمكنك أن تحزر فائدته من اسمه فقط، ويمكنك أيضا ملاحظة أن الزرّان المسؤولان عن الولوج إليه هما أول حرف من كلمة Replace.

النّمط بكل بساطة يُخوّلكَ لاستبدال ما تشاء سواء حرفا واحدا في كل مرّة أو مجموعة في آن واحد.

بحيث :

  • الزر r لاستبدال حرف واحد فقط.
  • الزر R لاستبدال عدة حروف في آن واحد.

3. المزيد عن الانتقال بين الجمل والفقرات

لقد ذكرنا سابقا (الدرس السابق) أساسيّات التّنقل في ملفّ معيّن، سنغطّي المزيد في هذه الفقرة.

الانتقال إلى الفقرة التالية، استعمل { .

تريد عكس الأمر؟ Ctrl+o سيفي بالأمر.

تحريك المؤشر بين الجمل:

للانتقال بين الجمل ببساطة استعمل كلا من ( و )

حيث ) للانتقال إلى الجملة التالية و ( للرجوع إلى الجملة السابقة.

استعمل الأرقام إذا كنت ترغب بالقفز وتجاوز الجمل، مثلا 3) للانتقال إلى الجملة الثالثة بعد المؤشر (يمكنك تغيير الرقم 3 بما تشاء).

للانتقال إلى حرف معيّن:

fx

حيث x هو المكان الذي نرغب بوضع مؤشر الفأرة عليه.

يمكنك استعمال الأرقام أيضا، مثلاً:

3fx

في هذا المثال نُخبِرُ vim بأن ينتقل إلى حرف x الثّالث (يعني تجاوز أوّل حرفين x وانتقل إلى الثّالث).

4. تعليم منطقة معيّنة في ملفك

تخيل أنك كتبت كمّا كبيرا من الشيفرة في ملفّك، وأثناء كتابتك في لحظة معينة تذكّرت أنك تحتاج إلى إضافة شيء ما بالأعلى، لنقل بداية الملف، ستقول الأمر سهل كل ما عليّ فعله هو الضغط على gg للانتقال إلى الأعلى ثم أضيف ما أشاء، نعم الأمر يبدو جيّداً، لكن ماذا لو أردت العودة إلى المكان الأول الذي كنت فيه قبل الانتقال إلى الأعلى؟ هنا يأتي دور التعليم أي وضع علامة في مكان ما لتمييزه بزر معين.

لاستخدام التعليم قم بالضغط على m (اختصارًا لـِ mark) ثم الزر الذي تريد التعليم به.

بالمثال يتضح المقال:

إذا كان مؤشر الفأرة مثلا في منطقة ما في وسط الملف (على حرف معيّن بالضبط) وتريد تعليمه بزر a :

ma

الآن انتقل إلى أي مكان ترغبه في الملف وكلما أردت العودة إلى السطر المعلّم بزر a ستضغط على a'، أما إذا كنت ترغب في العودة إلى موضع المؤشّر بالتّحديد فاضغط على a`.

يمكنك استعمال أي حرف من ( a-z A-Z ) بشرط أن يكون حرفاً واحداً فقط أي أنّك تملكُ ما مجموعه 52 زرا لتعليم مختلف مناطق الملف.

5. استعمال الأرقام لتكرار العمليّات

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

مثلا لنقل أنّ لدينا جملة في ملفنا، ننسخ الجملة باستعمال yy (اُنظر الدرس الأول) ولكنّنا لا نريد لصقها مرة واحدة فقط بل العديد من المرات (أي تكرارها في الملف n مرّة). للقيام بذلك طبّق الأمر التالي:

np

بحيث n هو عدد المرات التي ترغب بلصق الجملة في الملف (بعد مؤشر الفأرة مباشرة).

أقرب مثال أستحضره حاليا هو القوائم في لغة HTML، لنقل أنّك تحتاج إلى إضافة 10 قوائم في الملف. هل تعتقد أن كتابتها بشكل يدوي سيفي بالغرض؟ (إن كان جوابك نعم فاستعدّ للتضحية بحصة لا بأس بها من وقتك الثمين). بالطبع الجواب هو لا. لذلك كل ما عليك فعله هو كتابة السطر الأول:

<li> Item in The List </li>

ثم انسخ السطر باستعمال yy ثم ألصقه 10 مرّات باستعمال:

10p

2.png

طبّقت الأمر 1000000p وحصلت على مليون سطر (نواة لينكس؟) وملف بحجم 28Mb ولا زال vim يستجيب في أجزاء من الثانية، لا تغيير في السرعة حتى عند الحفظ (لا أظن أن أي بيئة تطوير قادرة على فعل نفس الشّّيء خلال جزء من الثانية، وهذا سبب قويّ لاستخدام المحرر، أليس كذلك؟).

ملاحظة: هذا مجرد مثال والتطبيقات تكاد تكون لا نهائية لذلك الدّور عليك لتستكشف تطبيقات الطريقة وهذا الأمر متروك لخيالك ومدى رغبتك في التّعلّم .

6. التّراجع وإلغاء التراجع

لقد تحدّثتُ أيضاً عن أساسيّات هذه الخاصية في الدرس السابق (u للتراجع عن تعديل ما و Ctrl+r لإلغائِه)، وقد حان الوقت الآن لبعض العمليّات المتقدّمة.

تراجع عن جميع التعديلات التي قمت بها قبل x دقائق من الآن:

:earlier 2m

هذا الأمر يقوم بالتراجع عن جميع التعديلات التي قُمت بها منذ دقيقتين، وبالطبع يمكنك استخدام الثواني كوحدة زمنية.

:earlier 25s

ولعكس العمليّة استعمل later:

:later 3m

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

للتّراجع بحسب عدد التّعديلات:

:undo 5

الأمر أعلاه يقوم بإلغاء آخر خمس تعديلات.

عرض قائمة التراجعات:

:undolist

محرك البحث في vim

vim يمتلكُ محركَ بحث مدهش وقوي يمكنك إعداده وتخصيصه كيفما تشاء، حيث يمكنك إخبار المحرّر بأنك تُريد أن يتجاهل حالة الأحرف (مثلا a وA كلاهما سيوافقان نتائج البحث)، ويمكنك أيضا إعداده لعرض النتائج بشكل فوري (يعني أن يقوم بالبحث بمجرد المباشرة بالكتابة).

إخبار المُحرّر بأننا نريد بحثا فوريا:

:set incsearch

تجاهل حالة الأحرف:

:set ignorecase

مثلا إذا قمت بالبحث عن “hello” :

/hello

ستكون النتائج متوافقة مع كل من : Hello , hello , HELLO

هذه الإعدادات لن تُسجّل إذا أغلقت المحرّر، وقد ذكرت في الدّرس السّابق أنك تستطيع إضافة أسطر إلى ملف vimrc. لكي تُسجّلَ الإعدادات بشكل افتراضي، حيث يكون كل شيء معدّا مسبقاً فور فتح المحرّر، يمكنك فعل ذلك الآن إذا كنت ترغب في ذلك. فقط افتح الملف (ملف vimrc) وألصق الأسطر التالية في الأسفل:

set incsearch
set ignorecase

ملاحظة: للتنقّل بين عمليات البحث استعمل كلا من n و N.

النّصوص داخل الأقواس، علامات التّنصيص والمعقوفات

vim يُوفّر مساعدةً قيّمةً للمبرمجين، حيث يحتوي على كمّ كبيرٍ من الأوامِر التي تُساعدهم على التعامل مع كتلِ التّعليمات البرمجية (code blocks)، إذ يمكّنكَ المحرّر من تعديل، حذف و نسخ كل ما يوجد بداخل الرموز مثل : {} , “ “ , () , `` , <> أو حتى تضمينها كذلك.

التعديل

1. تعديل ما بداخل الرمزين {}:

يمكنك تعديل ما بداخل الرمزين { و } ببساطة وذلك باستعمال الأمر التالي:

ci{ أو ci}

ملاحظة: يجب على المؤشّر أن يكون إما على أحد الرمزين أو داخلهما (الملاحظة تنطبق على جميع الأوامر أسفله).

2. تعديل ما بداخل الرمزين <>:

يمكن ذلك بنفس الطريقة:

ci< أو ci>

بنفس الطريقة يمكن تعديل ما بداخل الأقواس ():

ci( أو ci)

3. تعديل ما بداخل علامات التنصيص " أو ' أو ` :

ci'أو ci” أو ci`

4. تعديل ما بداخل وسوم HTML:

يمكن أيضاً تعديل ما بداخل وسوم HTML بالأمر التالي:

cit

الحذف

الحذف يكون بنفس طريقة التعديل، فقط استبدِل c ب d، مثلا لحذف ما بداخل الرمزين {}:

di{ أو di}

أما لحذف ما بداخل وسوم HTML:

dit

النسخ

النسخ كذلك يتّبع نفس المنطق فقط استعمل y عوضا عن c و d مثلا لنسخ ما بداخل الأقواس ():

yi( أو yi)

في جميع الأوامر السّابقة تعلّمنا كيف ننسخ ما بالداخل فقط، فماذا لو أردنا تعديل، حذف أو نسخ العلامة أيضا؟ لفعل ذلك فقط استبدل i بـِ a، إليك مثالاً على ذلك:

لنقل أنّنا نملك ملفّا يحتوي على الآتي:

if (x == 0)

إذا طبّقنا الأمر(المؤشّر على أحد القوسين أو بداخلهما):

di)

سيقوم المحرر بحذف "x == 0".

أمّا لو طبّقنا الأمر:

da)

فسيقوم المحرّر بحذف "(x == 0)".

وقِسْ على ذلك بقيّة الأوامر(التّعديل والنّسخ).

المسافة البادئة للنّصوص (text indent)

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

مثال على استعمال المسافات البادئة:

if ...
// ...
else
// ...
end

في المثال أعلاه كتبنا جملة شرطية بدون أي مسافات بادئة.

if ...
    // ...
else
    // ...
end

أما في هذا المثال فقد قمنا بوضع مسافات بادئة لمزيد من التنسيق ولك أن تلاحظ الفرق.كما أن هناك لغات تُجبرُك على التّنسيق باستخدام المسافات البادئة (مثل Python) وإلا فلن يعمل البرنامج.

في vim هناك العديد من الخيارات للتحكّم بالمسافات البادئة، أولا عليك تفعيل خيار "المسافات البادئة الذكيّ" (Smart indent)، ومن المفضّل أن تضعه في ملفّ vimrc:

:set smartindent

ضبط عرض المسافة البادئة

أقصدُ بعرض المسافة البادئة، المسافة التي ستكون بين بداية السطر والكتابة (اُنظر المثال):

هذا نص بمسافة بادئة تساوي 0
 هذا نص بمسافة بادئة تساوي 1
    هذا نص بمسافة بادئة تساوي 4
          هذا نص بمسافة بادئة تساوي 10

لِضبط المسافة البادئة في vim طبّق الأمر التالي:

:set shiftwidth=x

حيث x عرض المسافة البادئة، من المُفضّل أن يكون 4 فقط.

:set shiftwidth=4

لوضع مسافة بادئة لسطرٍ ما استخدم:

>

ولإلغاء المسافة البادئة:

<

لوضع مسافة بادئة لمجموعة من الأسطُر:

vjjj>

حيث v للولوج إلى الوضع المرئي وj للانتقال للأسفل.

لوضع مسافة بادئة لما بداخل المعقوفات ({})، إذا كان لديك جملة شرطيّة مثلا في لغة جافاسكريبت:

function foo(){
//...
//...
//...
//...
}

قد ترغب في وضع مسافة بادئة لجميع الأسطر التي تتواجد داخل علامتي { ... } للقيام بذلك ضع المؤشّر على إحدى العلامتين وقم بالضغط على:

>i}

النتيجة ستكون كالتالي:

function foo(){
    //...
    //...
    //...
    //...
}

أمّا إذا أردت أن تنسّق الملف بكاملهِ في آن واحد فالأمر التالي سيُعطيكَ ما تريده:

gg=G

حيثُ gg لتحريك المؤشّر إلى أعلى الملفّ و = لإضافة المسافة البادئة وG للانتقال إلى آخر الملفّ.

تخصيص مظهر vim

محرّرvim يعتمِد مبدأ البساطة، لكن هذا لا يجعله غير قابل على تخصيص مظهره، بل تستطيع أن تجعل المحرّر فخماً وذا تصميمٍ مُبتكرٍ خاصّة مع الكمّ الكبير من السمات المتاحة له، إذ أن هناك مبرمجون من مختلف أنحاء العالم ينشُرونَ سماتٍ للمُحرّر، وسنكشف بعضاً منها في هذه الفقرة.

1. تنصيب السّمات

تنصيب السّمات على محرّر vim سهلٌ جدّاً، ولكنّه يختلف من نِظام تشغيل إلى آخر.

لمستخدمي Gnu/Linux أو Mac OS

قُم بتحميل المِلفّات (ملفّ واحد في غالب الأحيان) ثمّ اُنقل الملفّات بامتداد vim (مثلا color.vim) إلى المسار التالي :

~/.vim/colors/

ملاحظة: علامةُ ~ اختصار يُمثّل مُجلّد المنزل الخاصّ بك.

إذا لم يكن مُجلّد colors داخل مجلّد vim. ( المجلّد مخفيّ افتراضياً في متصفّح الملفّات لإظهاره اضغط Ctrl+h) موجوداً فقم بإنشائه. أو طبّق الأمر التالي في الطرفية (Terminal):

mkdir ~/.vim/colors

لمستخدمي Windows

هذا هو مسار مُجلّد vim. :

%userprofile%\vimfiles

كل ما عليك فعله هو الذهاب إلى قائمة" ابدأ" (start) ثمّ " تشغيل" (run) بعد ذلك ألصق الأمر التالي:

%userprofile%

ثمّ قم بإنشاء مجلد vimfiles، وبعد ذلك أنشئ مجلّداً باسم colors هذا هو المجلّد الذي سنقوم بنقل ملفات السمات داخله.

2. تفعيل السّمات والتبديل بينها

الآن أنت جاهز لتفعيل السمات التي قمت بتحميلها (لا تقلق أنت لم تحمّل شيئا بعد)، بعد إكمال عمليّة نقل الملفّات المناسبة (ذات امتداد vim) إلى مجلد

.vim/colors

أو

%userprofile%\vimfiles\colors

يمكنك مباشرة فتح vim وتجربة السّمة التي ثبّتها بالأمر:

:colorscheme theme

سيتغيّر المظهر لكنّ الأمر لن يُحفَظ لحفظه ولإبقاء المظهر في كل مرة تفتح ملفّا في vim عليك إضافة السطر التالي في vimrc. :

colorscheme theme

بالطبع مع تغيير theme إلى اسم السّمة.

3. السّمات الافتراضيّة

لنتحدّث الآن عن سمات المحرّر، في vim هناك سمات افتراضية موجودة أصلاً ولا تحتاج إلى تحميل يمكنك معاينتها وانظُر أأعجبتكَ أم تريد شيئا أفضل:

سمة desert

3.png

سمة blue

4.png

سمة darkblue

5.png

سمة delek

6.png

سمة elflord

7.png

سمة morning

8.png

سمة pablo

9.png

سمة slate

10.png

هناك المزيد والمزيد من السّمات التي يُوفّرها لك المحرّر يمكنك تصفحها عبر الأمر:

:colorscheme <tab>

تحميل السّمات

إن لم يُعجبك أي مظهر من مظاهر المحرّر الموجودة أعلاه، لا تقلق لا يزال هناك أمل، سأسرد لك بعضا من السّمات الموجودة خارج المحرّر وعليك تحميلها إذا أردت تفعيلها.

وكما قلت سابقا لتفعيل أيّ سمة يكفي أن تنقل الملفّ بامتداد vim إلى مجلّد colors ثم نفّذ الأمر:

:colorscheme theme

حيثُ theme هو اسم الملف، مثلا إذا كان اسم الملفّ color.vim فيكفي أن تغيّر theme إلى color، ولإبقاء السّمة، أضف السّطر إلى ملفّ vimrc..

سمة Guardian

هذه أحد السمات التي يمكن تحميلها مثلا، ثم تنصيبها بالطريقة التي قمنا بشرحها أعلاه:

11.png

سمة Github

12.png

هذه سمةٌ أخرى يُمكن تحميلها شبيهة بسمة موقع Github.

سمة Vividchalk

13.png

لتحميل السمة.

سمة Candy

14.png

تحميل السّمة

ختاما

لقد تعرّفنا في هذا الدرس على قدراتِ vim المتقدّمة في التّحرير والتّعامل مع مختلف أنواع النّصوص والجمل، وأيضاً على طرق لتخصيص المحرّر، ولكنّه يحوي أكثر من هذا كلّه خاصّة أنّه مليء بالمفاجآت، والإضافات التي تستطيع أن تجعله أكثر من مجرّد محرّر!


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...