سجل الأوامر كان مقبرة: كيف أنقذنا ‘الباحث التقريبي’ (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 وتعلم أساسياته. أعدك بأنها ستكون من أفضل الساعات التي استثمرتها في تحسين بيئة عملك. انطلق وحرر نفسك من جحيم الأوامر المنسية! 🚀

أبو عمر

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

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

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

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

آخر المدونات

الشبكات والـ APIs

كانت خوادمنا تستجدي التحديثات: كيف أنقذتنا ‘خطاطيف الويب’ (Webhooks) من جحيم الاستقصاء المستمر (Polling)؟

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

17 مايو، 2026 قراءة المزيد
الحوسبة السحابية

كانت بنيتنا التحتية قصراً من رمال: كيف أنقذتنا “البنية التحتية ككود” (IaC) من جحيم البيئات المتضاربة؟

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

17 مايو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

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

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

17 مايو، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

كانت قاعدة بياناتنا تتوسل الرحمة: كيف أنقذنا التخزين المؤقت (Caching) من جحيم الاستعلامات البطيئة

قصة حقيقية من واقع العمل عن كيفية انهيار نظامنا تحت ضغط الاستعلامات المتكررة، وكيف كان التخزين المؤقت (Caching) هو طوق النجاة. مقالة عملية للمطورين تشرح...

17 مايو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كان التحقق من هوية عملائنا يستغرق أياماً: كيف أنقذنا الذكاء الاصطناعي (eKYC) من جحيم الإجراءات اليدوية؟

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

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

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

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

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

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

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

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