سجل الأوامر كان مقبرة: كيف أنقذنا ‘الباحث التقريبي’ (Fuzzy Finder) من جحيم الأوامر المنسية؟

يا جماعة الخير، السلام عليكم ورحمة الله.

أذكرها وكأنها البارحة، كانت الساعة قد تجاوزت الثانية بعد منتصف الليل في مكتبي الصغير بمدينة رام الله. كنت غارقًا حتى أذني في تصحيح خطأ برمجي (bug) “عويص” في نظام يعتمد على حاويات دوكر (Docker). المشكلة كانت أنني قبل ثلاثة أيام، أو ربما أربعة، كتبت أمرًا طويلًا ومعقدًا لتشغيل حاوية معينة مع متغيرات بيئة (environment variables) كثيرة جدًا، وهذا الأمر هو مفتاح حل المشكلة الآن.

وبدأت رحلة العذاب. ضغطتُ Ctrl+R وبدأت أكتب “docker run”، لكن النتائج كانت كثيرة ومتشابهة. لجأتُ بعدها للسلاح التقليدي: history | grep docker. يا إلهي! مئات الأوامر، معظمها لا علاقة له بما أبحث عنه. شعرت بنفسي كمن يبحث عن إبرة في كومة قش، أو كما نقول عنا في فلسطين “بدور على جمل إبرة”. بدأت أضغط على السهم العلوي في الطرفية (Terminal) بشكل جنوني، وكل ضغطة كانت تزيد من إحباطي. وقتها قلت لنفسي: “يا زلمة، لازم يكون في طريقة أحسن من هيك! هاي مش عيشة!”.

في تلك الليلة، لم أجد الأمر. لكنني وجدت شيئًا أفضل بكثير، شيئًا أنقذني من هذا الجحيم، وكان اسمه: الباحث التقريبي أو الـ “Fuzzy Finder”.

ما هو جحيم الأوامر المنسية؟

كل مطور أو مدير أنظمة يعرف هذا الشعور جيدًا. ذاكرة سطر الأوامر (command history) تتحول مع الوقت إلى مقبرة ضخمة للأوامر. أوامر مفيدة، أوامر معقدة، أوامر تستخدم مرة في السنة… كلها تُدفن تحت طبقات من الأوامر اليومية البسيطة مثل ls و cd.

المشكلة ليست في أننا ننسى، فالنسيان طبيعة بشرية. المشكلة تكمن في أدوات البحث التقليدية:

  • Ctrl+R (Reverse Search): أداة جيدة، لكنها تبحث عن تطابق متسلسل. إذا كنت لا تتذكر بداية الأمر بالضبط، فلن تفيدك كثيرًا.
  • history | grep [كلمة]: هذه الطريقة أفضل قليلًا، لكنها تظل بدائية. تعرض لك قائمة طويلة وغير تفاعلية، وعليك بعدها نسخ الأمر الذي تريده ولصقه يدويًا.

هذا الحمل المعرفي (Cognitive Load) في محاولة تذكر الصيغة الدقيقة للأوامر المعقدة (مثل git, kubectl, ffmpeg) هو مضيعة حقيقية للوقت والطاقة الذهنية التي من المفترض أن نوجهها لحل المشكلات الحقيقية.

ودخل “الباحث التقريبي” على الخط…

الباحث التقريبي، وتحديدًا أشهر أداة في هذا المجال وهي fzf، هو الحل السحري لهذه المشكلة. فكرته بسيطة وعبقرية: بدلًا من البحث عن تطابق تام، هو يبحث عن تطابق “تقريبي” أو “ضبابي” (fuzzy).

ماذا يعني ذلك؟ يعني أنك لست بحاجة لتذكر الأمر بالضبط أو ترتيب الكلمات فيه. يمكنك فقط كتابة أجزاء متفرقة من الأمر، وسيقوم fzf بعرض قائمة تفاعلية بالنتائج التي تتطابق مع هذه الأجزاء، مع ترتيب أفضل النتائج في الأعلى. كل هذا يتم في الوقت الفعلي (real-time) مع كل حرف تكتبه!

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

لنُشَمِّر عن سواعدنا: تثبيت وإعداد fzf

الكلام النظري جميل، لكن دعونا نرى “شغل مرتب” على أرض الواقع. تثبيت fzf سهل للغاية على معظم الأنظمة.

خطوات التثبيت

يمكنك تثبيته باستخدام مدير الحزم المفضل لديك:

# على macOS باستخدام Homebrew
brew install fzf

# على Debian/Ubuntu
sudo apt-get install fzf

# على Arch Linux
sudo pacman -S fzf

بعد التثبيت، قم بتشغيل سكربت الإعدادات التلقائية. هذا أهم جزء لأنه يربط fzf مع الطرفية الخاصة بك ويفعّل الميزات السحرية مثل Ctrl+R.

$(brew --prefix)/opt/fzf/install

أو إذا قمت بتثبيته من مصدر آخر، ابحث عن ملف install وقم بتشغيله. سيطلب منك تفعيل بعض الخيارات، وافق عليها جميعًا (y). بعد ذلك، أعد تشغيل الطرفية.

القوة الحقيقية لـ fzf: ما وراء البحث البسيط

الآن بعد أن قمنا بالتثبيت، حان وقت المرح. fzf ليس مجرد أداة، بل هو منصة يمكنك دمجها مع أي شيء تقريبًا في سطر الأوامر.

وداعًا لـ Ctrl+R التقليدية!

هذه هي الميزة القاتلة التي ستجعلك تقع في حب fzf. الآن، عندما تضغط على Ctrl+R، بدلًا من السطر الصغير في الأسفل، ستظهر لك واجهة fzf التفاعلية تعرض سجل الأوامر بالكامل.

جربها الآن. اضغط Ctrl+R وابدأ بكتابة أجزاء من أمر استخدمته سابقًا. مثلًا، لو كنت أبحث عن أمر الـ Docker المعقد ذاك، يمكنني ببساطة أن أكتب:

docker run my-app-image

ستجد أن fzf يقوم بتصفية السجل فورًا ليظهر لك كل الأوامر التي تحتوي على هذه الكلمات الثلاث، بغض النظر عن ترتيبها أو ما بينها. تجد الأمر الذي تريده، تضغط Enter، وها هو يظهر في الطرفية جاهزًا للتنفيذ أو التعديل. سحر!

التنقل بين الملفات والمجلدات بسرعة البرق

هل سئمت من كتابة ls ثم نسخ اسم الملف لفتحه؟ fzf يحل هذه المشكلة.

  • للبحث عن ملف وفتحه: يمكنك استخدام fzf لإيجاد ملف ثم تمرير اسمه إلى أمر آخر مثل محرر النصوص.
# سيبحث في كل الملفات والمجلدات ويعرضها في fzf
# عند اختيار ملف، سيتم طباعة اسمه
# يمكننا استخدامه لفتح الملف في vim أو أي محرر آخر
vim $(fzf)

نصيحة من أبو عمر: في إعدادات الطرفية (مثل .zshrc أو .bashrc)، يمكنك عمل اختصار لهذا. أنا شخصيًا أستخدم Ctrl+T الذي يوفره fzf تلقائيًا للبحث عن ملف ولصق مساره في سطر الأوامر الحالي.

  • للانتقال إلى مجلد: يوفر fzf اختصارًا رائعًا هو ALT+C. عند ضغطه، يفتح fzf واجهة للبحث عن المجلدات. بمجرد اختيار مجلد والضغط على Enter، ينتقل بك الأمر cd إليه مباشرة. لا مزيد من cd ../../...!

fzf واللعب مع الكبار (Git, Docker, etc.)

هنا تظهر عبقرية fzf الحقيقية: قدرته على العمل مع مخرجات أي أمر آخر. المبدأ بسيط: أي قائمة نصية يمكن تحويلها إلى قائمة تفاعلية قابلة للبحث.

أمثلة مع Git

  • الانتقال بين الفروع (Branches):
# اعرض كل الفروع، ابحث فيها بـ fzf، ثم انتقل للفرع المختار
git checkout $(git branch --all | tr -d ' *' | fzf)
  • استعراض سجل الـ Commits:
# اعرض سجل الـ commits بشكل جميل، ابحث فيه، ثم اعرض تفاصيل الـ commit المختار
git log --oneline --graph | fzf | cut -d ' ' -f 1 | xargs git show

أمثلة مع Docker

  • إيقاف حاوية معينة:
# اعرض الحاويات الشغالة، اختر واحدة، ثم أوقفها
docker stop $(docker ps | sed 1d | fzf | awk '{print $1}')

أمثلة مع العمليات (Processes)

تحذير: استخدم هذا الأمر بحذر شديد!

  • قتل عملية معينة:
# اعرض كل العمليات، ابحث فيها بـ fzf، ثم اقتل العملية المختارة
ps -ef | sed 1d | fzf | awk '{print $2}' | xargs kill -9

الأمثلة لا حصر لها. أي شيء يمكنك إخراجه كقائمة نصية، يمكنك “تَفْزِيْزُه” (من fzf-ify بالإنجليزية 😉).

نصائح من مطبخ أبو عمر

بعد سنوات من استخدام هذه الأداة يوميًا، إليك بعض النصائح العملية:

  1. خصّص مظهر fzf: الألوان الافتراضية قد لا تعجبك. يمكنك تخصيص كل شيء عبر متغير البيئة FZF_DEFAULT_OPTS. ضعه في ملف .zshrc أو .bashrc. هذا ما أستخدمه شخصيًا:
  2. export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --margin=1 --padding=1'
  3. اصنع دوالك الخاصة (Functions): لا تكتفِ بكتابة الأوامر الطويلة كل مرة. حوّلها إلى دوال بسيطة في ملف إعدادات الطرفية. مثلًا، دالة للبحث في سجل Git:
  4. # دالة للبحث في سجل git
    f_git_log() {
      git log --oneline --graph | fzf | cut -d ' ' -f 1
    }
    
    # الآن يمكنك فقط كتابة f_git_log في الطرفية
  5. استخدمه داخل محرر الأكواد: متعة fzf لا تقتصر على الطرفية. هناك إضافات رائعة له في محررات مثل Vim/Neovim (تلسكوب هو الأفضل) و VS Code، مما يتيح لك البحث عن الملفات والكلمات داخل المشروع بنفس الطريقة السريعة والتقريبية.

الخلاصة: لا تترك إنتاجيتك في المقبرة

في عالم تطوير البرمجيات، نحن محاطون بأدوات معقدة وقوية. لكن أحيانًا، تكون الأدوات الصغيرة والبسيطة هي التي تحدث أكبر فرق في إنتاجيتنا اليومية وسعادتنا كمطورين.

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

نصيحتي لك: استثمر ساعة واحدة من وقتك لتثبيت fzf وتعلم أساسياته. أعدك بأنها ستكون من أفضل الساعات التي استثمرتها في تحسين بيئة عملك. انطلق وحرر نفسك من جحيم الأوامر المنسية! 🚀

أبو عمر

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

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

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

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

آخر المدونات

التكنلوجيا المالية Fintech

كان الربط مع البنوك كابوساً: كيف أنقذتنا ‘الخدمات المصرفية المفتوحة’ (Open Banking) من جحيم التكاملات المعقدة؟

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

24 أبريل، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

بنيتنا التحتية كانت قصراً من ورق: كيف أنقذنا Terraform من جحيم التغييرات اليدوية

أشارككم قصة حقيقية من قلب المعركة مع السيرفرات، وكيف انتقلنا من الفوضى والتعديلات اليدوية الكارثية إلى بنية تحتية صلبة ومؤتمتة بالكامل باستخدام Terraform. هذه ليست...

24 أبريل، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كانت مساراتنا المهنية طريقاً مسدوداً: كيف أنقذتنا ‘مصفوفات الكفاءة’ من جحيم الركود الوظيفي؟

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

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

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

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

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

كودنا كان مليئاً بالأرقام الغامضة: كيف أنقذتنا ‘التعدادات’ (Enums) من جحيم الأرقام السحرية؟

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

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

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

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

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