تعديلاتي كانت رحلة عذاب يدوية: كيف أنقذتني ‘مؤشرات التحرير المتعددة’ من جحيم التكرار الممل؟

السلام عليكم يا جماعة الخير، معكم أخوكم أبو عمر.

اسمحوا لي أن أرجع بالذاكرة لبضع سنوات، لأيام كنت لا أزال أشق طريقي في عالم البرمجة المعقد. أذكر ليلة من تلك الليالي، كانت الساعة قد تجاوزت الثانية صباحًا، وأنا جالس أمام الشاشة، عيوني محمرّة من التعب والتركيز. كنت أعمل على مشروع كبير، وقررت في لحظة “عبقرية” متأخرة أن أغير اسم متغير مهم في قاعدة البيانات من item_price إلى price_in_usd. يا إلهي، ما أكبر الخطأ الذي ارتكبته!

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

وبعد أيام، وأنا أشاهد فيديو لمبرمج محترف يشرح شيئًا ما، رأيته يفعل شيئًا يشبه السحر. بضغطة زر، ظهرت مؤشرات كتابة (cursors) في أماكن متعددة على الشاشة، وبدأ يكتب في كل هذه الأماكن في نفس الوقت! بقيت أنظر إلى الشاشة مذهولًا. يا زلمة، ما هذا؟ اكتشفت حينها ما يُعرف بـ “مؤشرات التحرير المتعددة” (Multi-Cursor Editing). تلك اللحظة كانت نقطة تحول حقيقية في إنتاجيتي كمبرمج. ومن يومها، أصبحت هذه الميزة سلاحي السري ضد التكرار الممل.

ما هي “مؤشرات التحرير المتعددة” (Multi-Cursor Editing)؟

ببساطة شديدة، هي ميزة خارقة في معظم محررات الكود الحديثة (مثل VS Code, Sublime Text, Atom, وغيرها) تسمح لك بإنشاء أكثر من مؤشر كتابة واحد في ملفك. بدلًا من أن يكون لديك مؤشر واحد يومض وينتظر أوامرك، يمكنك أن تضع عشرات المؤشرات في أماكن مختلفة، وكل ما تكتبه أو تحذفه يتم تطبيقه في كل هذه الأماكن في نفس اللحظة.

قد تبدو كأنها نسخة متطورة من “البحث والاستبدال” (Find and Replace)، لكنها أكثر تفاعلية ومرونة وقوة بمراحل. أنت ترى التغييرات تحدث أمام عينيك مباشرة، وتتحكم فيها بشكل كامل.

كيف غيّرت هذه الميزة حياتي البرمجية؟ (أمثلة عملية)

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

1. تعديل أسماء المتغيرات والدوال دفعة واحدة

لنتخيل نفس السيناريو الذي عانيت منه. لديك متغير اسمه temp_val وتريد تغييره إلى temperatureCelsius في ملف كامل.

الطريقة القديمة (طريقة العذاب):

  1. ابحث عن temp_val.
  2. عدّل الكلمة.
  3. ابحث عن التالية.
  4. عدّل الكلمة.
  5. … كرر 50 مرة مع الدعاء ألا تخطئ.

الطريقة الجديدة (طريقة أبو عمر):

  1. حدد أول ظهور لكلمة temp_val.
  2. اضغط على Ctrl+D (أو Cmd+D في ماك) عدة مرات. مع كل ضغطة، سيقوم المحرر بتحديد الكلمة التالية المطابقة وإضافة مؤشر عندها.
  3. عندما يتم تحديد كل الكلمات التي تريد تغييرها، ابدأ بالكتابة مباشرة: temperatureCelsius.

شاهد السحر يحدث أمامك. كل الكلمات تتغير في نفس الوقت!


// الكود قبل التعديل
function processReading(temp_val) {
  if (temp_val > 30) {
    console.log("Hot day!");
  }
  const adjusted_val = temp_val + 5;
  return adjusted_val;
}
let temp_val = 25;
processReading(temp_val);

// بعد استخدام المؤشرات المتعددة (تعديل واحد فقط)
function processReading(temperatureCelsius) {
  if (temperatureCelsius > 30) {
    console.log("Hot day!");
  }
  const adjusted_val = temperatureCelsius + 5;
  return adjusted_val;
}
let temperatureCelsius = 25;
processReading(temperatureCelsius);

ملاحظة: في المثال أعلاه، لم أغير adjusted_val عمداً لأوضح أنك تتحكم تماماً بما يتم تحديده.

2. تحويل القوائم والبيانات بسرعة البرق

هذه من أكثر الحالات التي أستخدم فيها هذه الميزة. لنفترض أنك نسخت قائمة من الأسماء من ملف نصي، وتريد تحويلها إلى قائمة HTML (<li>).



رام الله
نابلس
الخليل
غزة
القدس

الطريقة القديمة: نسخ ولصق <li> و </li> حول كل سطر… يا للملل!

الطريقة الجديدة:

  1. استخدم ميزة “تحديد العمود” (Column Selection). في VS Code، يمكنك فعل ذلك بالضغط على Alt+Shift ثم السحب بالماوس لأسفل عند بداية كل الأسطر. سيظهر لك مؤشر طويل.
  2. اكتب <li>. ستتم إضافتها في بداية كل سطر.
  3. الآن اضغط على زر End في الكيبورد. ستنتقل كل المؤشرات إلى نهاية أسطرها.
  4. اكتب </li>.

وفي ثلاث خطوات، تحصل على النتيجة:


<li>رام الله</li>
<li>نابلس</li>
<li>الخليل</li>
<li>غزة</li>
<li>القدس</li>

3. إضافة أو حذف نفس الشيء في أسطر متعددة

لنفترض أنك تعمل على ملف CSS وتريد إضافة خاصية !important لعدة أسطر متفرقة لتجربة شيء ما بسرعة.


.card {
  color: #333;
  background-color: #fff;
  border-radius: 8px;
  padding: 16px;
}

بدلًا من الذهاب لكل سطر، يمكنك ببساطة الضغط على Alt (أو Option في ماك) والنقر بالماوس في نهاية الأسطر التي تريد التعديل عليها. سيظهر مؤشر في كل مكان تنقر فيه. ثم اكتب !important مرة واحدة.


.card {
  color: #333 !important;
  background-color: #fff !important;
  border-radius: 8px;
  padding: 16px !important;
}

هذه الحركة الصغيرة توفر عليك التنقل المزعج بين الأسطر.

أشهر الاختصارات التي لا أستغني عنها (في VS Code كمثال)

لكل محرر اختصاراته، ولكن هذه هي الأشهر في VS Code والتي أستخدمها يوميًا:

  • Ctrl + D (أو Cmd + D): تحديد الكلمة الحالية وإضافة مؤشر، ومع كل ضغطة تالية يحدد المطابقة التالية. هذه جوهرة حقيقية.
  • Alt + Click (أو Option + Click): إضافة مؤشر جديد في أي مكان تنقر فيه بالماوس. مثالية للتعديلات في أماكن متفرقة.
  • Alt + Shift + سحب بالماوس: تحديد كتلة أو عمود من النص وإضافة مؤشرات في كل سطر ضمن هذا التحديد. ممتازة للتعامل مع القوائم.
  • Ctrl + Alt + السهم للأعلى/للأسفل: إضافة مؤشر في السطر الذي فوق أو تحت السطر الحالي.

نصائح من “أبو عمر” لتصبح محترفًا في استخدامها

  • ابدأ بالبسيط: لا تحاول تعلم كل شيء دفعة واحدة. ابدأ بمهمة بسيطة مثل إعادة تسمية متغير باستخدام Ctrl+D. عندما تعتاد عليها، ستجد نفسك تبحث عن طرق أخرى لاستخدامها.
  • اجعلها عادة: في البداية، قد تنسى وجود الميزة وتعود للطريقة اليدوية. أجبر نفسك على التوقف والتفكير: “هل يمكنني فعل هذا بشكل أسرع باستخدام المؤشرات المتعددة؟”. بعد فترة، سيصبح الأمر تلقائيًا.
  • استكشف محرر الكود الخاص بك: ابحث في إعدادات واختصارات محرر الكود الذي تستخدمه عن “Multi-Cursor” أو “Multiple Selections”. قد تكتشف اختصارات وميزات لا تعرفها.
  • غيّر طريقة تفكيرك: الأهم من حفظ الاختصارات هو أن تبدأ في النظر إلى الكود كـ “أنماط” (Patterns) وليس مجرد “أسطر”. عندما ترى نمطًا متكررًا، فكر مباشرةً: “هذه مهمة للمؤشرات المتعددة”.

الخلاصة: استثمر دقائق لتوفير ساعات 🚀

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

نصيحتي الأخيرة لك: لا تبقَ أسيرًا لجحيم التكرار اليدوي. افتح محرر الكود الآن، وجرب هذه الاختصارات على ملف بسيط. استثمر 15 دقيقة فقط لتعلم الأساسيات، وأعدك بأنك ستشكرني لاحقًا. هذه ليست مجرد أداة، بل هي قوة خارقة صغيرة تجعل حياتك كمبرمج أفضل بكثير.

أتمنى لكم يومًا مليئًا بالكود النظيف والإنتاجية العالية. 💪

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

اختبارات الاداء والجودة

اختبار الانحدار البصري: كيف أنقذنا واجهاتنا من جحيم الأخطاء المرئية الصامتة؟

أشارككم قصة من قلب المعركة مع الأخطاء المرئية غير المتوقعة، وكيف أصبح "اختبار الانحدار البصري" (Visual Regression Testing) درعنا الواقي. اكتشفوا معنا هذه التقنية، وأشهر...

14 أبريل، 2026 قراءة المزيد
أتمتة العمليات

تقاريرنا كانت سجينة أنظمة قديمة: كيف أنقذتنا ‘أتمتة العمليات الروبوتية’ (RPA) من جحيم الاستخراج اليدوي للبيانات؟

أشارككم قصة حقيقية من واقع عملي كمبرمج، وكيف حررنا بياناتنا من سجون الأنظمة القديمة (Legacy Systems) باستخدام أتمتة العمليات الروبوتية (RPA). اكتشفوا كيف يمكن لهذه...

14 أبريل، 2026 قراءة المزيد
نصائح برمجية

بياناتنا كانت تتغير من تحت أقدامنا: كيف أنقذتنا ‘اللامتغيرية’ (Immutability) من جحيم الآثار الجانبية الخفية؟

أشارككم قصة حقيقية عن خطأ برمجي كاد أن يدمر مشروعًا بأكمله، وكيف كان مفهوم "اللامتغيرية" (Immutability) هو طوق النجاة. اكتشفوا معي هذا المبدأ الذي يغير...

14 أبريل، 2026 قراءة المزيد
ذكاء اصطناعي

نماذجنا كانت تفقد ذكاءها بمرور الوقت: كيف أنقذنا ‘رصد الانحراف’ (Model Drift Monitoring) من جحيم التدهور الصامت؟

أذكر جيدًا ذلك الشعور بالإنجاز عندما أطلقنا نموذجنا الأول لتصنيف مشاعر العملاء، ولكن سرعان ما تحول الحلم إلى كابوس صامت. هذه هي قصتنا مع 'انحراف...

14 أبريل، 2026 قراءة المزيد
خوارزميات

مهامنا كانت عالقة في حلقة مفرغة: كيف أنقذنا ‘الفرز الطوبولوجي’ من جحيم الاعتماديات الدائرية؟

في أحد المشاريع، توقفت مهامنا الآلية في حلقة لا تنتهي، وكاد اليأس أن يتملكنا. في هذه المقالة، أشارككم كيف اكتشفنا مشكلة الاعتماديات الدائرية وكيف كانت...

14 أبريل، 2026 قراءة المزيد
تسويق رقمي

ميزانيتنا الإعلانية كانت تحترق: كيف أنقذتنا واجهة برمجة تطبيقات التحويلات (Conversions API) من جحيم الإسناد الأعمى؟

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

14 أبريل، 2026 قراءة المزيد
البودكاست