تاريخ Vim
قبل ظهور نظام التشغيل الشهير يونكس UNIX ظهر محرر النصوص "ed" والذي كتب بواسطة Ken Thompson عام 1971، يعتبر هذا المحرر من اقدم واول محررات النصوص ويعتبر اول محرر نصوص ينفذ فكرة التعبيرات النمطية (Regular Expressions).
وبعد هذا بفترة ظهر محرر النصوص "ex" اختصارا ل "EXtend" كاضافة علي "ed" ولجعله اكثر سهولة في الاستخدام.
كتب محرر النصوص "vi" في عام 1976 بواسطة Bill Joy لنظام BSD وبالطبع وفق رخصة تحمل نفس اسم النظام وهي رخصة للبرامج مفتوحة المصدر عندما بدأت انظمة مثل (VT-100) في الظهور. كتب هذا المحرر كاضافة وتعديل علي "ex"، و يحتوي محرر النصوص هذا علي وضعين فقط من الاوضاع التي يوفرها Vim حاليا والتي سوف نتحدث عنها تفصيلا، وهو يعمل من خلال سطر الاوامر فقط.
- بعد صدور "vi" بعده اعوام ظهرت العديد من النسخ له وكان اشهرها Vim و هو اختصار Vi Improved اي Vi المحسن و ايضا ظهر elvis ونسخ اخري.
بدء العمل علي بناء Vim سنة 1991 بواسطة Bram Moolenaar وكان الهدف من ذلك هو بناء محرر نصوص متكامل لحواسيب Amiga لتحرير الكود المصدري (Source Code). ويتم اصدار Vim وفق رخصة GPL اي انه برنامج مفتوح المصدر. ظل Vim ايضا يعمل من خلال سطر الاوامر الي عام 1996 حين تم برمجة اول واجهة مستخدم له، وكان حينها في الاصدار الرابع.
- مقدمة عن Vim
قبل تعلمي لمحرر Vim قمت باستخدام عدد من محررات النصوص التقليدية ك Gedit و Kate لكن كانت هذه المحررات دائما تفتقر الي العديد من المميزات مثل المرونة في الاستخدام، ووفرة الاختصارات.
علي الرغم من سهولة Gedit و Kate الي ان Vim مقارنة بهم يعتبر اقوي كثيرا، وفي هذه المقالة سوف نعرف لماذا. ايضا Gedit و Kate محررات نصوص رسومية علي العكس من Vim و Emacs والذين يتوفر لهم نسخ تعمل من خلال سطر الاوامر و من خلال كافة المنصات.
هناك بعض الناس يشبهون هذا الامر بانه عليك ان تستخدم دراجة بدلا من السيارة لان الدراجة تستطيع الذهاب بها الي الي العديد من الاماكن التي لا تستطيع السيارة الذهاب اليها، ايضا ماذا سيحدث ان تعطلت سيارتك؟ حينها لن تستطيع الرجوع الي المنزل لكن ان كنت تستخدم دراجة فلن تقلق ابدا من هذا الامر.
ماذا لو تعطلت واجهة الرسوميات لديك؟ حينها لن تستطيع استخدام محررات النصوص Gedit و Kate ولن تتمكن من اصلاح هذا العطل في اغلب الاحيان!
- ايضا يتوفر Vim مع كل منصات يونكس دون الحاجة الي تنصيبة علي العكس من Emacs.
لقد حاولت ايضا تعلم محرر نصوص Emacs والذي يمكن مقارنته ب Vim من حيث قوة مميزاته ولكني في اخر مرة كنت قد اعتدت علي استخدامه، حتي احتجت الي التعديل في ملف .emacs لجعله يتناسب مع استخدامي .. حينها قررت تعلم Vim.
هناك ايضا العديد من الاسباب التي جعلتني افضل Vim علي Emacs فعلي سبيل المثال وفرة بيئات التطوير ومحررات النصوص الاخري التي تدعم اختصارات Vim فعلي سبيل المثال Qt Creator وهو بيئة التطوير الخاصة بQt يحتوي علي Vim mode والذي يمكن من خلاله استخدام كافة اختصارات Vim ومحاكاته تماما. ايضا توجد اختصارات Vim مع صدفيتي (Shell) المفضلة ZSH. ربما لن تصدق ان قلت لك ان Chromuim او Google Chrome يحتوي علي اضافة (Extension) رائع لاختصارات Vim.
يحتوي Vim علي كم هائل من المميزات التي تزيد من انتاجيتك، ولكن تعلم هذه المميزات ليس بالامر السهل فيقول احد المطورين الذين يستخدمون Vim منذ فتره طويلة ساخراَ " محرر النصوص الاكثر انتشارا بين مطورين لغة روبي المحترفين هو Vim لكن تعلم استخدامه ربما يكون اصعب من تعلم البرمجة نفسها!"
اخر سببين من الاسباب التي جعلت Vim محرر نصوصي المفضل؛ هم وفرة مصادر تعلمه علي الانترنت، و ثراء صفحات المساعدة الخاصة به فيمكنك من خلال الامر (:help) الوصول الي هذه الصفحات. السبب الاخر هو ان اختصاراته صحية اكثر من اختصارات Emacs!! اقصد بذلك انك لن تحتاج ان تقوم بالتعديل علي الاختصارات الاصلية لVim و تنسيقهم حسب حاجتك فالاختصارات الاصلية بسيطة واكثر سهولة من تلك التي يوفرها Emacs، اغلب هذه الاختصارات لا تتعدي الزر الواحد او الاتنين علي العكس من Emacs الذي يرغمك علي كثرة استخدام ازرار التعديل (Modifier Keys) (CTRL, ALT) وهذا يعد امرا غير تقليديا.
حسناَ كفانا حديثاَ عن المميزات ولنبدء في تعلم Vim.
المستوي الاول: الخطوات الاولي:
اولا: كيفية التنصيب
كما ذكرنا سابقا ف Vim ياتي مدمجا مع انظمه يونكس ويمكن استخدامه من خلال كتابة vim من خلال سطر الاوامر، واذا اردته ان يعمل بدعم العربية فما عليك الا كتابة vim -a ولكن ان كنت ترغب في استخدامه عن طريق واجهة رسومية اسهل فيمكنك تنصيبها من خلال الامر
$ sudo apt-get install vim-gtk الان سوف تجده مثبتا باسم GVim.
ثانيا: الاوضاع Modes
في محررات النصوص التقليدية تكفي الكتابة وحدها علي لوحة المفاتيح لادخال الحروف وكتابة شئ ما. لكن في Vim الامر يختلف قليلا، ففي الوضع التقليدي او العادي (Normal Mode) ويسمي ايضا (Command Mode) لن يمكنك هذا، فيتوجب عليك ان تغير من ال(Normal Mode) الي وضع الادخال (Insert Mode) بضغط زر i
، لكي تتمكن من الكتابة وكانك تستخدم اي محرر نصوص تقليدي.
وهنا بعض اوامر التحويل الي وضع الادخال:
i يقوم هذا الزر بتحويلك الي وضع الادخال قبل المكان الحالي للمؤشر.
a يقوم هذا الزر بتحويلك الي وضع الادخال بعد مكان المؤشر الحالي.
I يقوم هذا الزر بالقفز بالمؤشر الي اول حرف ليس بمسافة في السطر و تحويلك الي وضع الادخال.
A يقوم هذا الزر بالقفز بالمؤشر الي اخر حرف في السطر و تحويلك الي وضع الادخال.
للعوده الي ال(Normal Mode) يمكنك الضغط علي ESC او اختصار CTRL+{. لعلك الان تتسال مافائدة ال(Normal Mode) وما الجديد فيه. في هذا الوضع يكون Vim مستعدا لاستجابة اوامرك مثل التنقل في الملف المفتوح او ازالة حروف او لصق ماتحوية الحافظة (Clipboard) او كما ذكرنا سابقا الوصول الي صفحات المساعدة بادخال :help. يمكنك تشبيه هذا الوضع زر CTRL مضغوط وكل ازرار لوحة المفاتيح تحولت استخدامتها من الكتابة العادية الي القاء بعض الاوامر.
هنا بعض من هذه الاوامر
i →وضع الادخال. ESC للعودة الي الوضع العادي او اي من اوامر الادخال السابق ذكرها x → ازالة الحرف الذي يقف عليه المؤشر :wq → للحفظ واغلاق البرنامج (:w للحفظ, :q للاغلاق) dd → لازالة (والاحتفاظ) بالسطر الخالي او بمعني اخر Cut p → للصق ماتم الاحتفاظ به للتنقل في الملف المفتوح:
hjkl (highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j look like a down arrow. :help <command> → Show help about <command>, you can start using :help without anything else. هناك بعض الملحوظات الواجب اخذها في الاعتبار:
- في هذه المقالة بدلا من ان اكتب CTRL+C سوف اقوم بكتابة <C-c>.
- اي امر يبدء ب : لابد ان ينتهي بضغطة علي زر <enter> كمثال ان اردت حفظ الملف عليك ان تضغط :w<enter>
ماذا لو اردت تحديد بعض الكلمات ونسخها او ازالتها، لهذا يوجد مايسمي بالوضع المرئي (Visual Mode). يمكنك التحويل لهذا الوضع عندما تكون في الوضع العادي بالضغط علي اي من:
v من خلال هذا الزر تقوم بالتحول الي الوضع المرئي ويمكنك تحديد الحروف.
V من خلال هذا الزر تقوم بالتحول الي الوضع المرئي ويمكنك تحديد السطور.
CTRL+V من خلال هذا الاختصار تقوم بالتحول الي الوضع المرئي ويمكنك تحديد مساحة معينة من الحروف.
لا اظن ان الاوامر السابقة وحدها تكفي لجعلك مستخدم Vim ماهر، لذلك كل ماعليك هو التاقلم علي هذه الاوامر للانتقال للمستوي الاخر من هذه المقالة.
بعد قراءتك للجزء الاول من المقالة وممارستك لما بها من اوامر تكون قد تعلمت الاوامر الاساسية في Vim والان دعنا ننتقل لمستوي اخر، حيث سيكون بامكانك الاستمتاع بالقوة التي يوفرها Vim لك!
المستوي الثاني:
بعض الاختصارات التي تسهل التنقل في الملف:
0 → للذهاب لاول السطر ^ → للذهاب لاول حرف ليس بمسافة او فراغ في السطر $ → للذهاب لنهاية السطر g_ → للذهاب لاخر حرف ليس بفراغ في السطر /word → للبحث عن كلمة في الملف بعض الاختصارات للنسخ واللصق:
P → للصق قبل مكان المؤشر p → للصق بعد مكان المؤشر. yy → لنسخ السطر الحالي بالكامل بعض الاختصارات للرجوع لخطوة او اعادة تنفيذ خطوة:
u → للرجوع خطوة <C-r> → لاعادة تنفيذ خطوة بعض الاختصارات اثناء العمل في وضع الادخال (Insert Mode):
a → للادخال بعد المؤشر o → للادخال سطر جديد بعد السطر الحالي O → للادخال سطر جديد قبل السطر الحالي cw → replace from the cursor to the end the word بعض الاختصارات لحفظ الملف و انشاء ملف جديد و اغلاق ملف:
:e <path/to/file> → لفتح ملف معين :w → لحفظ الملف :saveas <path/to/file> → لحفظ الملف في <path/to/file> :x, ZZ or :wq → لحفظ الملف وغلقه (:x للحفظ عند الحاجة فقط) :q! → للاغلاق وعدم حفظ التغيرات :bn (resp. :bp) → show next (resp. previous) file (buffer) دع لنفسك فرصة ممارسة هذه الاختصارات وبعد الشعور باجادتك لهم يمكنك الانتقابل الي المستوي الثالث من المقالة.
المستوي الثالث:
اولا علي ان اهنئك لوصولك لهذا المستوي! الان يمكننا البدء في بعض الاوامر الشيقة الغير تقليدية في Vim والتي سوف تسهل عليك العمل كثبرا جداَ.
عند كتابتك للنص المصدري لبعض البرامج الا تجد نفسك تحتاج الي تكرار بعض من ماتفعل؟ مثل اضافة حرف معين الي اول كل سطر او ماشبه ذلك. اذاَ دعني اذكر لك بعض الاوامر المفيدة لتسهيل العمليات المكرره.
. → (dot) لاعادة اخر امر قمت به. N<command> → لاعادة تكرار امر معين قمت به عدد N من المرات. بعض الامثلة علي ذلك: 2dd → لحذف سطرين متتالين 3p → للصق النص ثلاث مرات متتالية 3ifoo [ESC] → لكتابة “foo foo foo “ . → لاعادة كتابة "foo foo foo" ثلاث مرات اخري 3. → لاعادة اخر امر ثلاث مرات اي كتابة "foo foo foo" 9 مرات سبق وان تعلمنا كيفية التحرك في الملف ولكن دعنا نزيد من قوة تحكمنا عن طريق هذه الاوامر.
NG → للذهاب للسطر رقم N gg → اختصار للامر 1g وبه سنتنتقل لاول سطر في الملف G → للذهاب لاخر سطر سبق وان تعلمنا كيفية التحرك في الملف ولكن دعنا نزيد من قوة تحكمنا عن طريق هذه الاوامر.